Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 23
  1. #11
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    92
    E' un po' più chiaro... ma non totalmente!

    Ho paura che i miei errori siano a monte .. :quipy:
    Le tabelle hanno una connessione ODBC a un database MySql .
    Ma leggendo nelle discussioni dei forum e anche su
    internet ho notato che spesso a MySql è in relazione
    a dbExpress e al componente TSQLConnection che io non uso.
    Per connettermi utilizzo una procedura di questo tipo
    (che ho trovato su internet - un sito francese )
    ..non so di preciso cosa significhi... ma mi apre le tabelle del db
    senza obbligarmi a mettere le stesse ADOTable a Active:=True prima
    di cominciare a lavorare!

    procedure Tdm.ApriConn ;
    var
    mySQLConnection : PMYSQL;
    begin
    mySQLConnection := mysql_init(nil );
    end;



    Forse prima di cercare di far funzionare la query...dovrei capire meglio come creare la connessione al db...
    hai qualche consiglio? :master:
    dovrei aprire una nuova discussione per questo argomento forse?)

    Grazie,
    Kate71

    PS ho paura di stare a creare un mostro più che un programma in questo momento visti gli innumerevoli errori che Delphi mi pesenta

  2. #12
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    dbExpress è solo un'altra piattaforma per l'accesso ai dati, così come lo è il BDE.

    Borland ha dichiarato come obsoleto il BDE incoraggiando l'uso della piattaforma dbExpress poichè quest'ultima è più leggera, ottimizzata per i database SQL e soprattutto portabile nell'ambiente Kylix, praticamente la controparte di Delphi per il sistema operativo Linux.

    Io chiaramente ti davo indicazioni su come impostare la query presupponendo che la connessione al database funzionasse correttamente. Se lanci l'applicazione, ti vengono presentati errori di connessione?

    Se usi il BDE, dovresti avere un componente TDatabase che rappresenta la connessione al database condivisa da tutte le tabelle TTable o query TQuery associate a quel componente.

    Prova a impostare la proprietà Connected del componente TDatabase al valore True: se ti vengono segnalati errori, probabilmente devi sistemare i parametri di connessione al database tramite il BDE Administrator, un'applicazione accessibile dal Pannello di Controllo di Windows che ti permette di configurare i cosiddetti "alias", che altro non sono se non gruppi di impostazioni per la connessione al database salvati permanentemente su disco ai quali è associato un nome.

    Non so darti altri suggerimenti poichè i dettagli della tua situazione mi appaiono troppo oscuri e vaghi...

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

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

  3. #13
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    92
    La connessione al DB sembrerebbe funzionare sia
    con sia senza componenti dbExpress... ma credo anche
    che prima di fare altre domande ... dovrei chiarirmi
    un po' le idee su come è meglio realizzare questo progetto
    visti i già innumerevoli cambiamenti.

    Comunque...credo che userò MySQL con dbExpress e ODBC.
    Ti ringrazio per l'aiuto e il tempo che mi hai dedicato !


    Kate71

  4. #14
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480

    Perchè ODBC?

    Originariamente inviato da kate71
    ...
    Comunque...credo che userò MySQL con dbExpress e ODBC.
    Questa frase mi fa sorgere qualche dubbio...ok per MySQL e dbExpress, ma perchè ODBC??
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #15
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    92
    Grazie Alka!
    ora credo di avere le idee un po' più chiare!!
    ma ora .....


    (Delphi7 e MySQL-ODBC- su win2000)
    dopo aver deciso quale database usare
    e quali componenti usare TTable, TQuery ecco il problema:

    sto testando la visualizzazione delle query su un progettino sperimentale!
    La select sono riuscita a farla funzionare dopo qualche ora...
    ma l'insert continua a darmi questo errore :
    ---------------------------
    Debugger Exception Notification
    ---------------------------
    Project Project1.exe raised exception class ENoResultSet with message 'Error creating cursor handle'.
    Process stopped. Use Step or Run to continue.
    ---------------------------

    In realtà i valori che immetto nella DBEdit
    vengono inseriti nella tabella ma in modo disordinatissimo
    (la colonna ID compare così: 8,9,25,18,11,23,28)
    NOTE :
    1) nel DB ho una sola tabella Test che è composta di 2 campi
    ID (autoincrement - chiave primaria) e NOME (varchar).
    2) ho 1 TTable , 2 query , 3 datasource
    3) nell'applicazione ho 2 dbGrid 1 che visualizza la tabella
    e uno che visualizza i risultati delle query .
    A runtime a seconda del pulsante sul quale clicco
    associo il secondo dbGrid al datasource di una delle query.
    4) ho 2 buttons uno per l'INSERT e uno per la SELECT.
    5) ho 2 DBEdit associati alla tabella attraverso il datasource1.
    DBEdit1 è associato al Datasource1 e al campo nome
    DBEdit2 è associato al Datasource1 e al campo id


    non so più cosa fare!!
    Invio il codice con la speranza di essere un po' più chiara!
    Dove sbaglio?
    Grazie!!!

    Kate71

    codice :
    (questa applicazione non fa che INSERT e una SELECT e visualizzare i risultati nelle dbGrid)


    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, Grids, DBGrids, DB, DBTables, StdCtrls, Mask, DBCtrls;

    type
    TForm1 = class(TForm)
    DataSource1: TDataSource;
    Table1: TTable;
    DBGrid1: TDBGrid;
    Query1: TQuery;
    DBGrid2: TDBGrid;
    DataSource2: TDataSource;
    Button1: TButton;
    DBEdit1: TDBEdit;
    Query1id: TIntegerField;
    Query1nome: TStringField;
    Table1id: TIntegerField;
    Table1nome: TStringField;
    Button3: TButton;
    DBEdit2: TDBEdit;
    Label1: TLabel;
    Label2: TLabel;
    DataSource3: TDataSource;
    Query2: TQuery;
    Button4: TButton;
    Query2id: TIntegerField;
    Query2nome: TStringField;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    Table1.Active := False;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
    qry_Insert : string;
    begin

    qry_Insert := 'INSERT INTO test(nome) VALUES
    ( '' ' + DBEdit1.Text + ' '' ) ';
    DBGrid2.DataSource := DataSource3;
    Query2.SQL.Clear ;
    Query2.SQL.Text := qry_Insert+val;
    Query2.Open ;

    end;

    procedure TForm1.FormShow(Sender: TObject);
    begin
    Table1.Active := True;
    DBEdit1.Text := '';
    DBEdit2.Text := '';
    end;

    procedure TForm1.Button3Click(Sender: TObject);
    var
    qry_Select : string;
    begin
    DBGrid2.DataSource := DataSource2;

    qry_Select := 'SELECT id, nome FROM test WHERE id = ' + DBEdit2.Text ;
    Query1.SQL.Text:= qry_Select;
    Query1.Open;
    end;

    end.

  6. #16
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Purtroppo non ho il tempo di analizzare tutto il codice che mi hai inviato, ad ogni modo posso dirti con sicurezza che l'esecuzione di uno statement SQL INSERT non restituisce alcun record, quindi non devi utilizzare il metodo Open del componente TQuery, bensì ExecSQL.

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

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

  7. #17
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    92
    Non so come ringraziarti!!
    così funziona!!!


    approfitto della tua disponibilità!
    ora ho aggiunto 1 tabella appTest e una Query con 2 datasource.
    Devo fare una ricerca sulla tabella Test e immettere i risultati
    sulla appTest visualizzandoli sul dbGrid.
    Il problema è che la procedura che ho scritto non inserisce nulla!
    ma non mi genera nessun errore!!

    questo è il codice dell'ultima procedura:

    procedure TForm1.Button4Click(Sender: TObject);
    var
    qry_search : string;
    begin
    DBGrid2.DataSource := DataSource4;

    // il datasource4 è il ds della tabella2(appTest)

    qry_search := 'INSERT into apptest(nome) SELECT test.nome FROM
    test WHERE test.nome = '' ' + DBEdit2.Text+' '' ' ;

    Query3.Close ;
    Query3.SQL.Clear ;
    Query3.SQL.Add(qry_search);
    Query3.ExecSQL ;

    end;

    Ancora Grazie,
    Kate71

  8. #18
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Non ho mai visto una SELECT incorporata ad una INSERT, ma forse ho lavorato troppo poco con SQL...sei sicura che vada bene?

    In ogni caso, ammesso che funzioni, è probabile che la query non ti restituisca alcun risultato e, pertanto, nessuna riga viene inserita.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  9. #19
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    92
    Ho testato la riga di codice SQL direttamente su MySQL,
    chiaramente, al posto della edit ho messo un valore qualunque
    (vedi esempi qui sotto)...
    e l'inserimento avveniva senza errori!

    delphi :
    str := 'INSERT into apptest(nome)
    SELECT test.nome
    FROM test
    WHERE test.nome = '' ' + DBEdit2.Text+' '' ' ;


    MySqL :
    INSERT into apptest(nome)
    SELECT test.nome
    FROM test
    WHERE test.nome = 'giovanni' .

    Grazie comunque...
    se trovo la soluzione, te la invierò!
    potrebbe essere utile!!!

    Kate71

  10. #20
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Potresti aver sbagliato a concatenare il contenuto della query letterale (quello tra apici, per intenderci) e il contenuto delle caselle di testo, magari evitando spazi che sono vitali e che ottengono un effetto diverso da quello che desideri.

    Io cerco sempre di incentivare all'uso del debugger: poni un breakpoint facendo clic sul margine sinistro della finestra del codice (denominato gutter)...dovrebbe apparire un pallino rosso.

    Quando esegui il programma, Delphi si arresta sulla riga e ti permette, attraverso apposite finestre di dialogo (Evaluate, Inspect, ecc.) di controllare la situazione, i valori delle variabili e degli oggetti e altro ancora.

    Magari, arresta il programma nel punto in cui viene definita la query ma prima della sua apertura e controlla lo statement SQL che sta per essere eseguito per verificare che sia come lo vuoi realmente.

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