Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27

Discussione: Delphi - Interbase

  1. #1

    Delphi - Interbase

    Ciao a tutti,
    ho un problemino con interbase:
    inserisco un nuovo campo nel mio db, faccio la commit, poi chiudo e riapro la tabella.
    Dopo aver fatto ciò, ovviamente il puntatore non è più sul ultimo record memorizzato, come posso fare per posizionarmi sull'ultimo record memorizzato?

    Fatemi sapere. Grazie.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Devi memorizzare il valore associato alla chiave (ad esempio un campo ID) e spostarti con il metodo Locate del DataSet, oppure se si tratta dell'ultimo record in assoluto della tabella, chiamare il metodo Last.

    Con "inserisco un nuovo campo" ti riferivi ad un cambiamento della struttura del database, vero?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    No, scusa, volevo dire un nuovo record.

    Ho già provato a fare ciò che hai scritto tu, anche perchè ho sempre fatto così, solo che:

    Subito dopo aver fatto il post, il valore Id del record(che è autoincrementato) è zero, quindi non ha ancora assunto il suo valore giusto perciò non riesco ad associare il valore ad una variabile per poi usare la funzione "locate".

    Cosa può essere?

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    E' normale che sia così, poichè - non conoscendo la struttura con cui hai a che fare - suppongo che il valore venga attribuito attraverso un generatore, quindi il record viaggia "orfano" dell'ID che gli viene attribuito solo quando raggiunge il server, pertanto la copia in memoria sul client rimane impostata al valore predefinito attribuitogli.

    Se usi i componenti InterBase Express, prova a studiarti il funzionamento del componente IBDataSet sulla Guida in linea.

    Il componente fornisce una proprietà GeneratorField che potrebbe fare al caso tuo, poichè sfrutta la particolarità dei generatori di InterBase e consente di inserire automaticamente il valore del generatore al verificarsi di certe eventualità.

    Se decidi di utilizzare questo strumento, devi però regolare il funzionamento dei trigger in merito al generatore, cioè assegnarlo solo se il contenuto del campo è NULL (in caso contrario, significa che il valore è già stato assegnato dall'applicazione client, ottenendolo comunque dal generatore).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Ho fatto varie prove col componente IBDataSet ma qualcosa non va:
    ti spiego in particolare cosa ho fatto:

    ho cercato di impostare il campo GeneratorFiled, solo che per poterlo utilizzare mi ha chiesto di inserire la SQL, che ho inserito nel campo SelectSQL (select * from RUBRICA), così ho potuto impostare il il valore ad GeneretorField; qui mi ha dato i generatori che mi sono creato nel db di interbase, ho impostato quello che mi serviva e ho poi impostato il campo collegato al generatore(ID) mettendo il parametro incremen by impostato a 1.
    Ho provato poi tutte e tre le scelte possibili nel parametro Apply event, sempre all'interno di GeneretorField; solo che mi da sempre zero come valore del campo ID subito dopo che faccio il post.

    Cosa sbaglio?

    Devo in qualche modo richiamare il campo GeneretorFiled dopo che faccio post o è in automatico?

    Va impostato in modo diverso l SQL all'interno di SelectSQL?

  6. #6
    Alka, puoi darmi una mano?
    Ti ringrazio.

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Ciao,
    scusami ma oggi sono piuttosto indaffarato: mi aspetta una sessione con la mia "fidanzata Delphi" fino a serata inoltrata per un progetto da consegnare domani.

    Non ho utilizzato il componente IBDataSet, ma ultimamente mi appoggio ai componenti dbExpress, tuttavia credo che il tuo problema sia dovuto al fatto che non hai inserito le query per le operazioni di inserimento, modifica e cancellazione, che sono poi quelle che coinvolgono l'uso del generatore, dato che il suo valore - previo incremento - viene assegnato proprio in fase di inserimento.

    Si tratta di un componente che, a differenza dei vari IBTable, IBQuery e soci (che sono previsti solo per compatibilità verso chi proviene dal BDE, usa statement SQL per interrogare il database, restituire valori, cancellarli, inserirli o aggiornarli, limitando il traffico di rete.

    Se vuoi fare inserimenti nella tua tabella, devi specificare anche lo statement InsertSQL nella omonima proprietà seguendo le convenzioni che sono spiegate nella Guida in linea.

    Altro non so perchè uso di solito meccanismo "fatti a mano" per questi scopi, dato che la piattaforma dbExpress, che è quella che uso io, è più astratta e non impiega i generatori poichè non esistono come strumento in tutti i database supportati.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Escludendo il discorso dell'inserimento del dato all'interno della mia tabbela, il problema è che, se vado ad osservare il valore che assume ID del componente IBDataSet non è sicuramente quello atteso, praticamente mi da un numero abbastanza casuale.

    Non capisco il ragionamento che devo seguire per far funzionare quel componente... sicuramente anche se non l'hai mai usato riusciresti a spiegarmi per logica(semplicemente) il funzionamento di tale elemento.

    Non capisco il momento in cui deve essere richiamato il componenete, il modo in cui deve essere richiamato e se tutto ciò avviene in automatico o se devo inserire nel mio codice qualche comando per far funzionare il generatore, o anche se devo avere il DataSource di tale elemento per poter in qualche modo accedere ad esso.

    Ho capito che non avrai tanto tempo per rispondermi però ci spero comunque.
    Grazie mille in anticipo.

  9. #9
    Alka, appena hai 2 minuti liberi rispondimi... è troppo importante e non ci capisco quasi nulla!!!

  10. #10
    Aiutooooo!!! Sò di essere un pò stressante ma sto impazzendo, non vuole funzionare nulla o meglio non riesco io!!!
    Datemi una mano.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.