Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Kopieren aus DBGrid1 in DBGrid (https://www.delphipraxis.net/132961-kopieren-aus-dbgrid1-dbgrid.html)

Dieter11 23. Apr 2009 22:52

Re: Kopieren aus DBGrid1 in DBGrid
 
Meinst Du so:
Delphi-Quellcode:

     ADOQuery_Preisliste.Active := False;
     ADOQuery_Preisliste.SQL.Clear;

     currentID := AdoQuery_Artikel.FieldValues['id'];
     ShowMessage('CurrentID: ' + IntToStr(CurrentID));

       AdoQuery_Artikel.SQL.Text := 'INSERT INTO Preisliste(ID_Artikel, Bezeichnung) VALUES( :ID, :Bezeichnung)';
       AdoQuery_Artikel.Parameters.ParseSQL(AdoQuery_Artikel.SQL.Text, true);
       AdoQuery_Artikel.Parameters.ParamValues['ID'] := AdoQuery_Artikel.FieldValues['id'];
       AdoQuery_Artikel.Parameters.ParamValues['Bezeichnung'] := AdoQuery_Artikel.FieldValues['Bezeichnung'];

       AdoQuery_Artikel.ExecSQL;

       ADOQuery_Preisliste.Open;

  end;
Auch hier habe ich, beim 1. Klick auf irgendeine Zeile im GRID beim ShowMessage: CurrentID: 1
anschliessend die Meldung: "Ein Parameterobjekt ..... " (wie oben)
und beim nächsten Klick auf eine Zeile die Meldung: Could not convert variant of type (Null) into type (Integer).

Die Felder ID sind Integer und Bezeichnung ist String bzw. Text

mkinzler 23. Apr 2009 23:01

Re: Kopieren aus DBGrid1 in DBGrid
 
Eher
Delphi-Quellcode:
AdoQuery_Insert.SQL.Text := 'INSERT INTO Preisliste(ID_Artikel, Bezeichnung) VALUES( :ID, :Bezeichnung)';
AdoQuery_Insert.Parameters.ParseSQL(AdoQuery_Insert.SQL.Text, true);
AdoQuery_Insert.Parameters.ParamValues['ID'] := AdoQuery_Artikel.FieldValues['id'];

Dieter11 23. Apr 2009 23:12

Re: Kopieren aus DBGrid1 in DBGrid
 
Du meinst:
Delphi-Quellcode:
     ADOQuery_Preisliste.Active := False;
     ADOQuery_Preisliste.SQL.Clear;

     currentID := AdoQuery_Artikel.FieldValues['id'];
     ShowMessage('CurrentID: ' + IntToStr(CurrentID));

     ADOQuery_Preisliste.SQL.Text := 'INSERT INTO Preisliste(ID_Artikel, Bezeichnung) VALUES( :ID, :Bezeichnung)';
     ADOQuery_Preisliste.Parameters.ParseSQL(ADOQuery_Preisliste.SQL.Text, true);

     ADOQuery_Preisliste.Parameters.ParamValues['ID'] := AdoQuery_Artikel.FieldValues['id'];
     ADOQuery_Preisliste.Parameters.ParamValues['Bezeichnung'] := AdoQuery_Artikel.FieldValues['Bezeichnung'];

     ADOQuery_Preisliste.ExecSQL;

     ADOQuery_Preisliste.Open;
  end;
Ergebnis:
- ShowMessage zeigt wieder den 1. Datensatz
- der 1. Datensatz wird kopiert
- folgende Fehlermeldung wird angezeit: ADOQuery_Preisliste: CommandText gibt keine Ergebnismenge zurück

[edit=mkinzler]Delphi-Tag gefixt Mfg, mkinzler[/edit]

mkinzler 23. Apr 2009 23:16

Re: Kopieren aus DBGrid1 in DBGrid
 
Lass mal das Open weg, den ein Insert liefert keine Ergebnismenge.

Ist das Grid mit AdoQuery_Artikel verknüpft?

Dieter11 23. Apr 2009 23:29

Re: Kopieren aus DBGrid1 in DBGrid
 
Jetzt erscheint keine Fehlermeldung mehr, aber kopiert wird immer nur der 1. Datensatz.
Also der gewünschte Datensatz wird markiert, aber nicht kopiert

Grid1 ist mit ADOQuery_Artikel und Grid2 mit ADO_Query_Preisliste verknüpft.

Dieter11 28. Apr 2009 21:47

Re: Kopieren aus DBGrid1 in DBGrid
 
Hallo mkinzler,
Danke für Deine Hilfe.

Ein Problem habe ich leider noch:
Es wird immer der 1. Datensatz in die Zieltabelle geschrieben, egal welchen ich im Grid1 markiere.
Vielleicht kannst Du mir nocheinmal einen Tip geben.

Delphi-Quellcode:
procedure Tfrm_Testformular.Button1Click(Sender: TObject);
var
  i, currentID: Integer;

begin
  inherited;

  with dm_Nails4You_Artikel do
  BEGIN
     ADOQuery_Preisliste.Active := False;
     ADOQuery_Preisliste.SQL.Clear;

     for i := 0 to DBGrid1.SelectedRows.Count - 1 do
     BEGIN

       DBGrid1.DataSource.DataSet.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));

       currentID := AdoQuery_Artikel.FieldValues['id'];

       ShowMessage('CurrentID: ' + IntToStr(CurrentID));
       ShowMessage('i: ' + InttoStr(i));

       ADOQuery_Preisliste.SQL.Text := 'INSERT INTO Preisliste(ID_Artikel, Bezeichnung) VALUES( :ID, :Bezeichnung)';
       ADOQuery_Preisliste.Parameters.ParseSQL(ADOQuery_Preisliste.SQL.Text, true);

       ADOQuery_Preisliste.Parameters.ParamValues['ID'] := AdoQuery_Artikel.FieldValues['id'];
       ADOQuery_Preisliste.Parameters.ParamValues['Bezeichnung'] := AdoQuery_Artikel.FieldValues['Bezeichnung'];

       ADOQuery_Preisliste.ExecSQL;
       ADOQuery_Preisliste.Refresh;

    End;
  end;

end;

mkinzler 28. Apr 2009 21:58

Re: Kopieren aus DBGrid1 in DBGrid
 
Und CurrentID ist richtig?

Ich würde
Delphi-Quellcode:
       ADOQuery_Preisliste.SQL.Text := 'INSERT INTO Preisliste(ID_Artikel, Bezeichnung) VALUES( :ID, :Bezeichnung)';
       ADOQuery_Preisliste.Parameters.ParseSQL(ADOQuery_Preisliste.SQL.Text, true);
vor die Schleife ziehen

Dieter11 28. Apr 2009 22:08

Re: Kopieren aus DBGrid1 in DBGrid
 
Das hatte ich bereits probiert.

Ich denke, dass das Problem hier liegt:
Delphi-Quellcode:
      DBGrid1.DataSource.DataSet.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

mkinzler 28. Apr 2009 22:09

Re: Kopieren aus DBGrid1 in DBGrid
 
Lass mal Pointer() weg.

Dieter11 28. Apr 2009 22:16

Re: Kopieren aus DBGrid1 in DBGrid
 
dann erhalte ich folgende Fehlermeldung:
[DCC Fehler] u_frm_Testformular.pas(54): E2010 Inkompatible Typen: 'Pointer' und 'string'


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr.
Seite 3 von 5     123 45      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz