Utiliser TQuery pour modifications
Bonjour
Je débute quasiment en Delphi, et je n'arrive pas à trouver comment, sans générer une erreur d'exécution, utiliser un composant dérivé de TQuery pour...
1. faire un SELECT pour alimenter un grid db-aware
2. offrir un bouton pour faire un INSERT via ce TQuery
3. rafraîchir le grid pour qu'il reflète l'insertion
Voici un exemple de test utilisant les composants DB + Query et le NextDBGrid de Aducom et Bergsoft, respectivement:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
//On crée la base + la table, et on la lie au grid
procedure TForm1.FormActivate(Sender: TObject);
begin
With ASQLite3DB1 do begin
DefaultDir := ExtractFileDir(Application.ExeName);
Database := 'test.sqlite';
Open;
SQLite3_ExecSQL('CREATE TABLE IF NOT EXISTS books (isbn INTEGER PRIMARY KEY, language VARCHAR)');
//SQLite3_ExecSQL('INSERT INTO books (isbn,language) VALUES (123,"english")');
end;
With ASQLite3Query1 do begin
Connection := ASQLite3DB1;
SQL.Text := 'SELECT * FROM books';
Open;
end;
DataSource1.DataSet := ASQLite3Query1;
With NextDBGrid1 do begin
DataSource := DataSource1;
//Pour que la colonne de droite prenne toute la place
Columns[ASQLite3Query1.FieldCount-1].Options := NextDBGrid1.Columns[ASQLite3Query1.FieldCount-1].Options + [coAutoSize];
end;
end;
//On insère un nouvel enregistrement
procedure TForm1.Button1Click(Sender: TObject);
begin
With ASQLite3Query1 do begin
Close;
SQL.Clear;
SQL.Text := 'INSERT INTO books (isbn,language) VALUES (:a,:b)';
//A modifier à chaque appel : clé unique
params[0].AsInteger := 567;
params[1].AsString := 'something';
//Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 004DB408 in module 'Project1.exe'
ExecSQL;
SQL.Clear;
SQL.Text := 'SELECT * FROM books';
//SQL.Add()
Open;
end;
end; |
Merci pour toute piste.