Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    [D6] procedure per ricerche su db MYSQL

    Ciao,
    ho un problema non difficile, ma che non riesco a risolvere.
    Delphi 6 e database mysql. Voglio fare un pulsante che onclick cerca la stringa che gli passo tramite un edit.text all'interno di una tabella, rappresentata in una dbgrid. Il risultato deve essere quello di selezionare il record della dbgrid che contiene la stringa cercata.
    Ora riesco a fare la ricerca su un solo campo, ma non mi seleziona il record corrispondente. Sono riuscito a fare la ricerca anche su tutti i campi, ma l'ho fatto associando a un unico button 8 azioni differenti, corrispondenti alla ricerca su ognuno degli 8 campi della tabella. Però è troppo lenta. Sono anche riuscito a cercare con un unico pulsante solo sul campo che riempio, ma non è questom il mio scopo!
    Ho letto sul manuale di marco cantù che occorre passare un variant array con i valori da cercare (pag 494). Ma non riesco a farlo. mi dice sempre typecast error! MI sapete suggerire la soluzione al mio problema?
    Ps: Posso usare solo il metodo locate, perchè uso dei componenti simili alle dbxpress (sempre per questioni di portabilità).
    Grazie mille!

  2. #2

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Prova a racchiudere i tuoi parametri tra parentesi quadre e passarle al metodo Locate richiudendoli con la funzione VarArrayOf.

    Un esempio:
    codice:
    MyDataSet.Locate('Nome;Cognome', VarArrayOf(['Marco', 'Breveglieri']), [loCaseInsensitive]);
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  4. #4
    Ciao,
    avevo già provato questa soluzione, ma mi dà parecchi errori:
    UNdeclared identifier:'VarArrayOf'
    Ordinal type required
    Incomnpatible types:'Integer' and 'String'

    altre soluzioni?

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Hai aggiunto la unit Variants alla clausola uses?

    Sei certo di aver scritto il codice correttamente?

    Prova a postarlo, così ce ne accertiamo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  6. #6
    aspetta aspetta!

  7. #7
    Ma perchè nessuno mi aveva detto che dovevo inserire variant negli uses? OK adesso la ricerca funziona! con tutti i campi!
    Quindi primo problema risolto!

  8. #8
    ora devo però fare in modo che la ricerca dopo aver trovato la stringa, selezioni il corrispondente record sulla dbgrid, anzi meglio: selezioni tutta la riga corrispondente a quel record.
    Basta usare dbgridselectedrows oppure devo fare qualcos'altro?
    questa cosa degli uses mi ha un po' spiazzato...

  9. #9
    procedure Tstato_domini.provaExecute(Sender: TObject);
    var c:string;
    begin
    inherited;
    c:=cerca.Text;
    if MYsqldataset1.Locate('Utente', VarArrayOf([c]),[])
    then MessageDlg('"'+c+'"found',mtError,[mbOk],0)
    end;

    questa è la procedure e funziona. ma se la modifico per immettere tutti i campi della tabella la ricerca non mi produce risultati, perchè?

    procedure Tstato_domini.provaExecute(Sender: TObject);
    var c:string;
    begin
    inherited;
    c:=cerca.Text;
    if MYsqldataset1.Locate('Utente;Owner;Manager', VarArrayOf([c,c,c]),[])
    then MessageDlg('"'+c+'"found',mtError,[mbOk],0)
    end;

    help...

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    La questione è semplicissima: generalmente, quando ottieni un errore del tipo "Undeclared identifier...", significa che il compilatore non ha trovato la dichiarazione di un identificatore (di tipo, di funzione, ecc.) che stai utilizzando; i casi possibili di soluzione sono pochi: o hai sbagliato a digitare il nome, o hai scritto un nome che effettivamente non esiste, oppure non hai utilizzato la unit in cui quell'identificatore è contenuto.

    Per sapere la unit corrispondente, basta aprire la Guida in linea di Delphi relativa all'argomento.

    Per selezionare le righe corrispondenti alla ricerca, probabilmente ti basterebbe eseguire quest'ultima direttamente sul dataset collegato alla DBGrid.

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

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

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 © 2025 vBulletin Solutions, Inc. All rights reserved.