Creazione nuova tabella con FireDAC

di il
29 risposte

29 Risposte - Pagina 2

  • Re: Creazione nuova tabella con FireDAC

    17/04/2024 - Alka ha scritto:


    Dipende da come si è abituati a lavorare, ad ogni modo la libreria client mi risulta che serva in tutti i casi, ossia con FireDAC, ZeosLib, dbExpre

    17/04/2024 - Alka ha scritto:


    17/04/2024 - GrandfatherCoder ha scritto:


    La creazione di una tabella tramite TFDTable, mi crea tutto,ma durante il primo inserimento,il solito messaggio d'errore mi informa che la pk non ha un valore iniziale.

    Questo non è un problema di creazione della tabella, ma di inserimento del record: se un valore deve essere specificato perché la chiave è NOT NULL, va specificato comunque, a prescindere che la tabella sia stata creata in un modo o nell'altro.

    17/04/2024 - GrandfatherCoder ha scritto:


    Per il resto,forse devo aprire un altro post per un altro problema: FireDAC non riesce ad accedere a Postgresql perchè mi cerca la libreria libpq.dll.

    Quella è la libreria client di PostgreSQL: FireDAC la usa per connettersi al database.

    17/04/2024 - GrandfatherCoder ha scritto:


    Con ZeosLib sembrava tutto più semplice.

    Dipende da come si è abituati a lavorare, ad ogni modo la libreria client mi risulta che serva in tutti i casi, ossia con FireDAC, ZeosLib, dbExpress e così via…

    Non usavo Windows dai tempi di Win2000/Xp.

    Tramite Linux-Ubuntu mi bastava solo una riga tramite apt e risolvevo il problema.

  • Re: Creazione nuova tabella con FireDAC

    17/04/2024 - GrandfatherCoder ha scritto:


    Non usavo Windows dai tempi di Win2000/Xp.

    Tramite Linux-Ubuntu mi bastava solo una riga tramite apt e risolvevo il problema.

    Evidentemente devi ancora studiare o ripassare Windows per poter farti bastare una riga anche con quel sistema operativo.
    Non è colpa di Windows. :)

  • Re: Creazione nuova tabella con FireDAC

    17/04/2024 - Alka ha scritto:


    17/04/2024 - GrandfatherCoder ha scritto:


    Non usavo Windows dai tempi di Win2000/Xp.

    Tramite Linux-Ubuntu mi bastava solo una riga tramite apt e risolvevo il problema.

    Evidentemente devi ancora studiare o ripassare Windows per poter farti bastare una riga anche con quel sistema operativo.
    Non è colpa di Windows. :)

    Come se avessi tutta l'eternità davanti.

    Non sono un ragazzino e non sto incolpando Windows,un sistema operativo che in realtà non ho mai potuto soffrire.(opinione personale)

    Mi chiedevi come ero abituato a lavorare,per anni ho lavorato solamente con i sistemi operativi Linux e BSD.

    Al di là di questo,per rispetto di chi ci legge,finora non mi sono spiegato bene ed è per questo che mi permetto di modificare il post.

    Per quanto riguarda MySQL,nessun problema,ho solo installato i connettori ed i relativi drivers.

    E cosi anche quelli relativi PostgreSQL.

    Di norma i files dll,dovrebbero finire sotto la root di Windows e da lì ogni libreria di sviluppo potrebbe attingere,trattandosi sempre di servizi offerti dal sistema operativo.

    Il fatto di dovermi trascinare il/i file/s della libreria fino alla home del progetto mi sembra talvolta un “overkill”.

    E mi perdo.

    Tutto qui.

    Chiudo  qui,vado avanti di testardaggine e grazie ai consigli dati dagli interventi qui sopra.

  • Re: Creazione nuova tabella con FireDAC

    18/04/2024 - GrandfatherCoder ha scritto:


    Come se avessi tutta l'eternità davanti.

    Capisco benissimo la problematica, ma purtroppo - volente o nolente - non vale come alibi: se “bruciare le tappe” portasse comunque a risultati di successo, lo farebbe chiunque, anche in età fertile. :)

    18/04/2024 - GrandfatherCoder ha scritto:


    Non sono un ragazzino e non sto incolpando Windows,un sistema operativo che in realtà non ho mai potuto soffrire.

    Se scrivi che “in Linux facevo così…”, stai prescindendo che in Windows questo non sia possibile e che tu non possa fare altrettanto.
    In realtà, con gli strumenti specifici, anche se con dinamiche diverse, si fa anche in Windows.
    I gusti in fatto di sistema operativo poi sono del tutto soggettivi.

    18/04/2024 - GrandfatherCoder ha scritto:


    Chiudo  qui,vado avanti di testardaggine e grazie ai consigli dati dagli interventi qui sopra.

    La “testardaggine” (che io intendo in senso positivo) è ottima, però ricordati che - trattandosi soprattutto di sistema “nuovo” e “indigesto” - documentarsi prima di “fare” è imprescindibile.

  • Re: Creazione nuova tabella con FireDAC

    Capisco benissimo la problematica, ma purtroppo - volente o nolente - non vale come alibi: se “bruciare le tappe” portasse comunque a risultati di successo, lo farebbe chiunque, anche in età fertile. :)”

    Si tratta sempre di avere il posto di lavoro.

    ?--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------?

    Comunque avevo scaricato da qui il setup PostgreSQL che installa sia il server Postgres,sia i connettori vari che i drivers

    https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

    Probabilmente il mio problema sarà legato al fatto che il server PostgreSQL non sia installato nella mia macchina,ma gira in un container di Docker.

  • Re: Creazione nuova tabella con FireDAC

    18/04/2024 - GrandfatherCoder ha scritto:


    Si tratta sempre di avere il posto di lavoro.

    Sarà un mio limite, ma continuo a non capire la metafora… ad ogni modo, andiamo avanti. :)

    18/04/2024 - GrandfatherCoder ha scritto:


    Probabilmente il mio problema sarà legato al fatto che il server PostgreSQL non sia installato nella mia macchina,ma gira in un container di Docker.

    Per poter accedere a un server PostgreSQL occorre installare la libreria client nella macchina in cui viene eseguito il software.

    Se il server PostgreSQL sta in Docker, e l'applicativo che deve accedervi gira fuori da Docker, su Windows, allora devi installare il client in Windows.

    Se l'applicazione che deve accedere al DB sta in Docker (con Delphi è possibile), allora occorre usare una immagine Docker che contenga anche il client PostgreSQL per poter supportare l'esecuzione del client.

    Fatico comunque a seguire quello che sta avvenendo, perché si parla di sistemi operativi, di creazione di tabelle, poi di accesso, di MySQL, di PostgreSQL… sembra un po' un calderone dove alla rinfusa vengono messi strumenti e applicativi diversi nel tentativo di produrre qualcosa, di cui però mi sfugge l'obiettivo finale (creare un programma reale… “avere il posto di lavoro”… boh…) e a fronte di tutta una serie di problemi incontrati di volta in volta, si incolpa Delphi, FireDAC, Windows e così via.

    Il mio discorso serve per dire questo: se l'obiettivo è “pocciare” (nel mio dialetto, sperimentare con diverse cose a ruota libera), allora ci sta tutto ma è naturale che poi sorgano problemi, da verificare di volta in volta (se non ci si documenta a dovere prima a 360 gradi), mentre se l'obiettivo è apprendere qualcosa in modo organico o realizzare un sistema funzionante, sicuramente l'approccio è sbagliato perché crea troppa confusione e distorsione sul percorso.

  • Re: Creazione nuova tabella con FireDAC

    19/04/2024 - Alka ha scritto:


    18/04/2024 - GrandfatherCoder ha scritto:


    Si tratta sempre di avere il posto di lavoro.

    Sarà un mio limite, ma continuo a non capire la metafora… ad ogni modo, andiamo avanti. :)

    18/04/2024 - GrandfatherCoder ha scritto:


    Probabilmente il mio problema sarà legato al fatto che il server PostgreSQL non sia installato nella mia macchina,ma gira in un container di Docker.

    Per poter accedere a un server PostgreSQL occorre installare la libreria client nella macchina in cui viene eseguito il software.

    Se il server PostgreSQL sta in Docker, e l'applicativo che deve accedervi gira fuori da Docker, su Windows, allora devi installare il client in Windows.

    Se l'applicazione che deve accedere al DB sta in Docker (con Delphi è possibile), allora occorre usare una immagine Docker che contenga anche il client PostgreSQL per poter supportare l'esecuzione del client.

    Fatico comunque a seguire quello che sta avvenendo, perché si parla di sistemi operativi, di creazione di tabelle, poi di accesso, di MySQL, di PostgreSQL… sembra un po' un calderone dove alla rinfusa vengono messi strumenti e applicativi diversi nel tentativo di produrre qualcosa, di cui però mi sfugge l'obiettivo finale (creare un programma reale… “avere il posto di lavoro”… boh…) e a fronte di tutta una serie di problemi incontrati di volta in volta, si incolpa Delphi, FireDAC, Windows e così via.

    Il mio discorso serve per dire questo: se l'obiettivo è “pocciare” (nel mio dialetto, sperimentare con diverse cose a ruota libera), allora ci sta tutto ma è naturale che poi sorgano problemi, da verificare di volta in volta (se non ci si documenta a dovere prima a 360 gradi), mentre se l'obiettivo è apprendere qualcosa in modo organico o realizzare un sistema funzionante, sicuramente l'approccio è sbagliato perché crea troppa confusione e distorsione sul percorso.

    Problema di accesso PostgreSQL risolto.

    Ho aperto un altro post per essere ordinato e spero che qualcuno possa eventualmente correggere nel caso vi siano errori o completare la mia guida.

    Penso al resto e viterrò informato.

    (Vi sono in qualche modo debitore ;) )

  • Re: Creazione nuova tabella con FireDAC

    19/04/2024 - GrandfatherCoder ha scritto:


    Problema di accesso PostgreSQL risolto.

    Ho aperto un altro post per essere ordinato e spero che qualcuno possa eventualmente correggere nel caso vi siano errori o completare la mia guida.

    Direi proprio di no, che non è una scelta “ordinata”: le discussioni qui si aprono per porre un tema o un problema, e una volta risolto si concludono, mentre se ne aprono altri se il problema cambia o si parla d'altro.

    Difatto, qui abbiamo divagato fino a questo momento, e alla fine hai aperto un thread nuovo per postare la soluzione a questo: in poche parole, il rovescio di come andrebbe fatto. :)

  • Re: Creazione nuova tabella con FireDAC

    Ecco cosa mi spunta quando provo ad inserire il primo record.
  • Re: Creazione nuova tabella con FireDAC

    22/04/2024 - GrandfatherCoder ha scritto:


    Ecco cosa mi spunta quando provo ad inserire il primo record.

    Hai provato a valorizzare il campo “Id”?

  • Re: Creazione nuova tabella con FireDAC

    Puoi mostrare l'sql?

    id è autoincrement?

  • Re: Creazione nuova tabella con FireDAC

    Ho risolto in maniera credo ancora rozza.

    Dopo la creazione della tabella,mi servo di TFDQuery per modificare la tabella appena creata

    Query.SQL.Text := Format('ALTER TABLE %s MODIFY COLUMN id INT AUTO_INCREMENT;',[Table_Name]);
    Query.ExecSQL;
    Query.SQL.Clear;
  • Re: Creazione nuova tabella con FireDAC

    23/04/2024 - sihsandrea ha scritto:


    Puoi mostrare l'sql?

    id è autoincrement?

    Si.Id era impostato come Autoincrement

     with FieldDefs do
       Add('id',ftAutoInc,0,true);
  • Re: Creazione nuova tabella con FireDAC

    23/04/2024 - GrandfatherCoder ha scritto:


    Si.Id era impostato come Autoincrement

    La richiesta - credo - era quella di vedere l'equivalente SQL (generato da qualche tool di amministrazione) per la creazione della tabella, ossia andare sulla tabella all'interno del tool e chiedere di generare lo script SQL di creazione, così da verificare se la caratteristica di “autoincrementale” fosse stata o meno applicata in fase di creazione da FireDAC.

    23/04/2024 - GrandfatherCoder ha scritto:


    Ho risolto in maniera credo ancora rozza.

    Ma quindi, con questa istruzione, non ottieni più l'errore rispetto a prima, oppure è un modo alternativo per aggiungere il campo ma l'errore dell'autoincrementale c'è ancora? oppure non hai controllato?

    Si stanno guardando troppe cose assieme. Andando per gradi, quello che andava fatto era

    1. controllare se la tabella generata da FireDAC avesse il campo autoincrementale… e no, non basta riportare il codice che crea la colonna, ma bisognava capire se la struttura effettiva della tabella risultante su DB avesse o meno questa caratteristica;
    2. una volta accertato che il campo fosse realmente autoincrementale, come da punto 1), andare a inserire il primo record verificando se l'errore del campo ID nullo si verificava ancora o meno, a prescindere da come è stato creato.

    Al netto di qualche stralcio di codice e informazioni altalenanti, qui non si è ancora capito quale fosse l'origine del problema, se ci fosse realmente un problema, cosa è stato fatto per verificarlo e - a fronte di suggerimenti e richieste - non sono arrivate le risposte alle domande.

    Comunque sia, se hai risolto, tanto meglio. :)

  • Re: Creazione nuova tabella con FireDAC

    ???!!! avevo chiesto la sql di inserimento.

    leggendo il 3d ho notato qualcosa di strano e inutile.

    al di là della doppia richiesta mysql prima e postgresql dopo, supponendo che hai risolto lato mysql, per postgresql fai così:

    dopo aver creato la connessione al db, prendi l'oggetto query, nominiamola ad esempio MyQueryPostgre.

    //per creare la tabella
    
    whith MyQueryPostgre do
    
      begin
    
        sql.clear;
    
       sql.add('CREATE TABLE MyTableName(   ID  SERIAL PRIMARY KEY,   DESCRIZIONE TEXT      NOT NULL,   CAMPONUMERICO  '+
    
                      ‘    INT       NOT                         NULL,   CAMPOCHAR CHAR(50),   CAMPOAVIRGOLA REAL )’);
    
       sql.execute;
      end;

    per inserire il record:

    VAR
      A, C: STRING;
      B: INTEGER;
      D: REAL;
    BEGIN
    ...
    A:='PIPPO';
    B:=10;
    C:='PLUTO';
    D:=20.78;
    ...
    whith MyQueryPostgre do
    
      begin
    
        sql.clear;
    
        sql.add('INSERT INTO MyTableName(DESCRIZIONE,CAMPONUMERICO,CAMPOCHAR,CAMPOAVIRGOLA)' +
         ' VALUES ( ' + A +', ' + B +', ' + C +', ' + D +' )’);
    
        sql.execute;
       end;
    END;

    Se usi autoincrement non devi inserire l'id, ci pensa il db ad inserirlo.

    se devi recuperare un id allora valorizzi l'id facendo attenzione che il nr sia disponibile.

    se vuoi usare i parametri:

    whith MyQueryPostgre do
    
      begin
    
        sql.clear;
    
        sql.add('INSERT INTO MyTableName(DESCRIZIONE,CAMPONUMERICO,CAMPOCHAR,CAMPOAVIRGOLA)' +
         ' VALUES ( :A , :B , :C , :D )’);
        parambyname('A').AsString:='PIPPO';
        parambyname('B').AsInteger:=10;
        parambyname('C').AsString:='PLUTO';
        parambyname('D').AsFloat:=20,78;
        sql.execute;
       end;
    END;
Devi accedere o registrarti per scrivere nel forum
29 risposte