Newsgroup: it.comp.lang.delphi
Titolo: Curiosità da neofita

Salve a tutti;
Stò a buon punto dell'apprendimento di Delphi(7), ma nonostante la 
consultazione della gran quantità di manuali e libri a disposizione, di due 
cose, apparentemente fondamentali, non trovo traccia.
Per primo, mi riferisco alla creazione degli indici di archivi, sia DBase 
che Paradox; quali istruzioni per creare file MDX?.
Per secondo; per eseguire il posizionamento sul record con il comando LOCATE 
con chiave parziale, si deve passare il parametro "loPortialKey". Io NON 
riesco neanche a compilare.
Per il primo quesito, quali istruzioni?
Per il secondo mando questo pezzo di codice che illustra il problema
{***************************************************************}
PROCEDURE TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
VAR bene:boolean;
    {SearchOptions: TLocateOptions;}
BEGIN
 { SearchOptions := [loPartialKey]; }
 Key:=upCase(Key);
 IF (Key = #13) THEN
  BEGIN
   IF form1.edit1.text='' THEN
    form1.MaskEdit2.SetFocus
   ELSE
    BEGIN
     form1.edit1.text:=UpperCase(form1.edit1.text);
     bene:=Valida_stringa(form1.edit1.text);
     IF bene THEN
      BEGIN
       variabile_1:=form1.edit1.text;
       Form2.Tabella_1.Active:=true;
       Form2.Tabella_2.Active:=true;
       Form2.Tabella_3.Active:=true;
   con questa riga la compilazione avviene, ma LA RICERCA E' SU UNA 
CORRISPONDENZA ESATTA.
       Form2.Tab_WBS.Locate('FIELD_Tabella_1",form1.edit1.text,[]);
   con questa riga la compilazione NON avviene PROPRIO
       Form2.Tab_WBS.Locate('FIELD_Tabella_1",form1.edit1.text,SearchOptions);
       Unit2.Form2.Show;
      END
    END;
  END
 ELSE IF (Key = #27) THEN
  BEGIN
   form1.edit1.text:='';
   Halt;
  END
 ELSE If NOT(Key in['A'..'Z','0'..'9',' ',#45,#8]) THEN
  {45TRATTINO,8CANCELLA,20SPAZIO}
  BEGIN
   Key:=#0;
   MessageBeep(Cardinal(-1));
  END
END;
{****************************************************************************}
Quali errori/mancanze commetto?
Grazie dei suggerimenti.

 ;
probabilmente dipende dal fatto che la dichiarazione di SearchOptions
(e la successiva assegnazione) sono dei semplici commenti, ovvero
inseriti in parentesi graffe. Prova a togliere tali parentesi e riprova.
guastatore

 guastatore
le graffe ci soino solo per compilare.


le graffe son presenti solo per la compilazione.
Inoltre c'è una svista, ho lasciato "Tab_WBS" in realtà leggere  "Tabella_1"
Carlo 

> le graffe ci soino solo per compilare.
Indica il tipo di errore che ottieni in fase di compilazione.

Carlo 
	Ciao
	MassimoB
 
---------------------------------
http://www.massimobeschi.it/
---------------------------------
Se tu pagare come dici tu ...
Io lavorare come dico io ...
Se tu pagare come dico io ...
Io lavorare come dici tu ...
---------------------------------

Chiedo scusa, ma solo ora leggo il msg.
Riporto, per chiarezza e con opportune correzzioni, per semplificare, il 
tracciato della procedura, che deve cercare la stringa presente in 
form1.edit1.text.
Come vedi, è una riga dell'istruzione locate, in due diverse modalità;
La prima riga, cerca form1.edit1.text in 'Field_Tabella_1' e risponde true e 
sposta il puntatore al record SOLO SE LA CORRISPONDENZA E' ESATTA.
La seconda riga, secondo quanto ho studiato sui manuali e libri, deve 
cercare form1.edit1.text in 'Field_Tabella_1' e spostare il puntatore al 
record CHE HA LA CORRISPONDENZA DEI CARATTERI PRESNTI IN form1.edit1.text. 
In parole semplici cerca una corrispondenza parziale.
Ora compilando con la prima riga (chiaramente mettendo le parantesi graffe 
per annullare le istrunzioni attinenti a "SearchOptions"), tutto OK. Ma non 
è' quello che vorrei accadesse.
Compilando invece con la seconda riga, dà questi errori:
[Error] Unit1.pas(56): Undeclared identifier: 'TLocateOptions'
[Error] Unit1.pas(58): Undeclared identifier: 'loPartialKey'
{*********************************************************************}
PROCEDURE TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
VAR bene:BOOLEAN;
    trovata:BOOLEAN;
    SearchOptions: TLocateOptions;
BEGIN
 SearchOptions := [loPartialKey];
 Key:=upCase(Key);
 IF (Key = #13) THEN
  BEGIN
   IF form1.edit1.text='' THEN
    form1.MaskEdit2.SetFocus
   ELSE
    BEGIN
     form1.edit1.text:=UpperCase(form1.edit1.text);
     bene:=Valida_stringa(form1.edit1.text);
     IF bene THEN
      BEGIN
       FF_WBS:=form1.edit1.text;
       Form2.Tabella_1.Active:=true;
       Form2.Tabella_1.GetIndexNames( ListBox1.Items );}
       Form2.Tabella_2.Active:=true;
       Form2.Tabella_3.Active:=true;
I RIGA
       trovata:=Form2.Tabella_1.Locate('Field_Tabella_1',form1.edit1.text,[]);
II RIGA
       trovata:=Form2.Tabella_1.Locate('Field_Tabella_1',form1.edit1.text,SearchOptions);
       IF trovata THEN
        Unit2.Form2.Show
      END;
    END;
  END
 ELSE IF (Key = #27) THEN
  BEGIN
   form1.edit1.text:='';
   Halt;
  END
 ELSE If NOT(Key in['A'..'Z','0'..'9',' ',#45,#8]) THEN
  {#45 TRATTINO,#8 CANCELLA,#20 SPAZIO}
  BEGIN
   Key:=#0;
   MessageBeep(Cardinal(-1));
  END
END;
{****************************************************************************}
In quale errore son incappoto?
Chi mi legge, sa dirmi qualcosa anche per ricreare i file indice?
Grazie.
Carlo 

 [Error] Unit1.pas(58): Undeclared identifier: 'loPartialKey'
Aggiungi la unit DB alla tua clausola uses.

 consultazione della gran quantitą di manuali e libri a disposizione, di 


 ha scritto nel messaggio 
news:vmWke.1436692$35.53...@news4.tin.it...
