Newsgroup: it.comp.lang.delphi
Titolo: Database

Salve a tutti è la prima volta che scrivo a questo newsgroup anche se vi
leggo da tanto tempo.
Sono un appassionato programmatore alle prime armi con Delphi, (quindi spero
abbiate pazienza ).
Sto divertendomi con i database, ne ho creato uno in Paradox 7 con 13
fields.
Il primo è uno smallint, come faccio a verificare , quando inserisco
qualcosa che non sia già presente nel database? (Ho provato questo codice
come da guida:
Table1.SetKey;
  Table1.Fields[0].AsString := Edit1.Text;
  if not Table1.GotoKey then
    ShowMessage('Record inesistente');
così funziona, mentre se tolgo il 'not', da errore.
Ho dei fields Time che mi vengono mostrati in una dbgrid in formato xx.xx.xx
mentre io vorrei solo le prime 4 cifre xx.xx, ho provato con la propriètà
displayformat ma pare non funzionare.
Ho inserito un metodo di ricerca che mi posiziona il cursore della dbgrid
sulla riga del record cercato, come faccio a renderla evidenziata?
questo è il codice che ho inserito in un Button:
Table1.SetKey;
Table1.Fields[0].AsString := Edit1.Text;
Table1.GotoNearest;
Scusate se non sono stato abbastanza chiaro causa l'inesperienza vi
ringrazio anticipatamente del tempo che vorrete concedermi.

 Table1.GotoNearest;
per renderla evidenziata, devi agire nella proprietà "Options"  ( del
TDBGrid ) portando a True dgRowSelect.
Ti saluto e buon lavoro.
Antonio Tarolla

TDBGrid ) portando a True dgRowSelect.
L'Options dgRowSelect è già impostata a True, per questo non capisco perchè
non risulta selezionata, mentre se ci clicco sopra con il mouse si.
Ciao.

 Ciao.
se ho capito bene, ti viene evidenziata solo quando ci clicchi con il mouse
? Se invece ti sposti tra i record tramite il TDBNavigator ( ad esempio )
non viene evidenziata !!
Se è così non mi viene proprio in mente perchè non ti viene evidenziata, io
ho provato e mi funziona in entrambi casi.
Alla prossima....ciao.

 Table1.GotoNearest;
Guarda la proprietà Options della DbGrid

performante. Guarda l'help di Delphi a riguardo
Io ho dei campi Edit da dove inserisco i dati. Ho provato con locate ma
forse sbaglio evento, perchè le
istruzioni le metto nel OnExit. Mi da questo errore: Project1.exe raised
exception class EDBEngineError with message 'Field value required. Field Ora
Inizio'. Ecc...
Ora Inizio è un campo che viene dopo, time format.
Ecco il codice che ho inserito su tuo suggerimento, ma mi dava lo stesso
errore con qualsiasi altra ricerca:
If not Table1.Locate (Table1Numeroturno.AsString,EditNumeroturno.Text,
[locaseinsensitive])
   then
    Showmessage ('Non trovato')
  else
    Showmessage('Già esiste')
Ciao


L'errore è nel campo di ricerca !!
Il campo o campi di ricerca sono semplicemente i nomi dei campi dove
effettuare la ricerca separati da virgola.
Nel tuo caso mi pare di capire che il campo dove cercare sia solo uno,
dunque:
  If not Table1.Locate ('Numeroturno',EditNumeroturno.Text,
[locaseinsensitive]) then
     Showmessage ('Non trovato')
  else
    Showmessage('il numero turno ' +
table1.fieldbyname('NumeroTurno').asstring + ' già esiste');
Dove:
'Numeroturno'  è il nome del campo della tabella
Quando la LOCATE ha successo puoi accedere ai campi del record trovato con
fieldbyname
Label1.caption:= Table1.fieldbyname('Campo').AsString
Spero esserti stato di aiuto
Ciao

Ci deve essere qualcosa che sbaglio sicuramente, perchè anche con il tuo
pezzo di codice continua a darmi key violation. Io ho già un edit con
pulsante per la ricerca e mi funziona benissimo, ho usato questo codice:
Table1.SetKey;
Table1.Fields[0].AsString := Edit1.Text;
Table1.GotoNearest;
mi si posiziona sul campo trovato o a quello più vicino nella dbgrid.
Il mio è un cotrollo che mi permetta mentre stò inserendo i dati di non
ripeterli 2 o più volte.
Comunque grazie e ciao.

 ha scritto nel messaggio
news:Tq2Ub.23223$VS6....@tornado.fastwebnet.it...

Attenzione : devi usare due tabelle diverse per fare l'inseriimento e la
ricerca , altrimenti quando metti in setkey la tabella 1 ti fa un post
automatico e allora ... key violation.
Crea una nuova Ttable con lo stessa tabella paradox e usala per fare le
ricerche. Fai close/open o un refresh prima delle ricerche per sincronizzare
i dati con la tabella di insrimento.
Giulio

Ti ringrazio, per ragionamento c'ero arrivato anch'io.
Ora ci provo. Speriamo non mi complico la vita visto che sono un
principiante. :)
Ciao

i dati con la tabella di insrimento.
Ho risolto con il tuo suggerimento.
Avevo provato a copiare dopo il Table1.Open iniziale il contenuto del campo
che mi interessava in un array e funzionava , però non so perchè quando
chiudevo il programma mi dava un errore di puntatore errato. Allora ho
creato un altra tabella con un solo campo (quelo che mi interessa per il
confronto e tutto funziona a meraviglia.
Grazie a tutti quelli che mi hanno dedicato del tempo.