AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringgrid Einträge in SQL-Tabelle übernehmen

Ein Thema von jmich · begonnen am 28. Okt 2022 · letzter Beitrag vom 1. Nov 2022
Antwort Antwort
jmich

Registriert seit: 24. Dez 2007
40 Beiträge
 
#1

Stringgrid Einträge in SQL-Tabelle übernehmen

  Alt 28. Okt 2022, 19:05
Delphi-Version: 11 Alexandria
Hallo Delphianer,

Habe mal wieder ein Problem wo ich nicht weiter komme.
Folgendes:

Ich möchte vom einen Stringgrid alle Einträge in eine
SQL Tabelle übernehmen.
Stringgrid:
Nr Bezeichnung Art Preis
_________________________________
1 Artikel 1 Muster 10,00
2 Artikel 2 Test 20,00
3 Artikel 3 Bild 30,00

u.s.w

Bei meinen Code wird in der SQL-Tabelle immer
leider nur die letzte Stringgrid-Zeile richtig übernommen.
( 3 Artikel 3 Bild 30,00 )

Habe dazu zwei Codes versucht - gleiche Ergebnis.

Hier meine Code:
Delphi-Quellcode:
procedure Ttestform.btn_saveClick(Sender: TObject);
var
LiteConnection : TLiteConnection;
LiteQuery: TLiteQuery;
i,n,nummer : Integer;
preis_um : Double;
begin
          LiteConnection := TLiteConnection.Create(nil);
          LiteQuery := TLiteQuery.Create(nil);

          LiteConnection.Database := ExtractFilePath(Application.ExeName)+'testmuster.db';
          LiteConnection.Connected := True;
          LiteQuery.Connection := LiteConnection;
          LiteConnection.Options.Direct := True;
         try
            LiteQuery.Close;
            LiteQuery.SQL.Clear;
            LiteQuery.SQL.Add('DELETE FROM' + QuotedStr(lbl_tabellenname.Caption)+''); // z.B tabellenname = mustertest
            LiteQuery.ExecSql;

           for i:= sgrid_test.FixedRows to sgrid_test.RowCount-1 do
                n := 1;
              begin
                repeat
                  LiteQuery.Close;
                  LiteQuery.SQL.Clear;
                  LiteQuery.Sql.Add('INSERT INTO '+QuotedStr(lbl_tab_datenbank.Caption)+' (beschreibung,art,preis,nr) VALUES('+QuotedStr(sgrid_test.Cells[1,n])+','    +QuotedStr(sgrid_test.Cells[2,n])+','+QuotedStr(sgrid_test.Cells[3,n])+','+QuotedStr(sgrid_test.Cells[0,n])+ ')');
                   n := n + 1;
                 
                  // 2.Code
                  {  for i:= sgrid_test.FixedRows to sgrid_test.RowCount-1 do
                        begin
                          LiteQuery.Close;
                          LiteQuery.SQL.Clear;
                          LiteQuery.SQL.Text := 'INSERT INTO' + QuotedStr(lbl_tab_datenbank.Caption) +
                            '( '+
                            '[beschreibung],[art],[preis],[nr]'+
                            ')'+
                            'Values ('+
                            ':be,:na,:pr,:nnr'+
                            ')';
                        LiteQuery.ParamByName('nnr').AsInteger := StrToInt(sgrid_test.Cells[0,i]);
                        LiteQuery.ParamByName('ver').AsString := sgrid_test.Cells[1,i];
                        LiteQuery.ParamByName('nam').AsString := sgrid_test.Cells[2,i];
                        LiteQuery.ParamByName('pr').AsFloat := StrToFloat(sgrid_test.Cells[0,i]);;
                        end;
                        LiteQuery.ExecSql; }
  // 2.Code Ende]

                until n = i;
              end;
               LiteQuery.ExecSql;
         finally
            LiteQuery.Free;
            LiteConnection.Free;
         end;
end;
Wie kann man alle Einträge (alle Zeilen) des Stringgrigs in die SQL-Tabelle übernehmen.

Vielen Dank im Voraus

Gruß jmich
  Mit Zitat antworten Zitat
jmich

Registriert seit: 24. Dez 2007
40 Beiträge
 
#2

AW: Stringgrid Einträge in SQL-Tabelle übernehmen

  Alt 28. Okt 2022, 19:13
Hi Leute,

habe die Lösung selber herausgefunden:

hier war der Fehler:
LiteQuery.ExecSql
gehört mit in die repeat until Schleife und
nicht außerhalb.

Trotzdem Danke an Alle
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#3

AW: Stringgrid Einträge in SQL-Tabelle übernehmen

  Alt 31. Okt 2022, 07:59
Hallöle...
Zitat:
habe die Lösung selber herausgefunden
...trotzdem gibt es einen entscheidenden Fehler...keine Parameter!
Delphi-Quellcode:
'INSERT INTO '+QuotedStr(lbl_tab_datenbank.Caption)+' (beschreibung,art,preis,nr) VALUES('+QuotedStr(sgrid_test.Cells[1,n])+','    +QuotedStr(sgrid_test.Cells[2,n])+','+QuotedStr(sgrid_test.Cells[3,n])+','+QuotedStr(sgrid_test.Cells[0,n])+ ')'
..
=

Besser:
Delphi-Quellcode:
LiteQuery.SQL.Text := 'INSERT INTO '+ QuotedStr(lbl_tab_datenbank.Caption) + ' (beschreibung,art,preis,nr) VALUES (:P1, :P2, :P3, :P4)';
LiteQuery.ParamByName('P1').AsString := QuotedStr(sgrid_test.Cells[1,n]);
LiteQuery.ParamByName('P2').AsString := QuotedStr(sgrid_test.Cells[2,n]);
LiteQuery.ParamByName('P3').AsString := QuotedStr(sgrid_test.Cells[3,n]);
LiteQuery.ParamByName('P4').AsString := QuotedStr(sgrid_test.Cells[0,n]);
=

Grund:
https://de.wikipedia.org/wiki/SQL-Injection
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

AW: Stringgrid Einträge in SQL-Tabelle übernehmen

  Alt 31. Okt 2022, 10:24
Einem Parameter.AsString einen QuotedStr zu übergeben, ist das nicht doppelt gemoppelt und müsste dazu führen, dass die DB-Einträge dann auch gequoted sind?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#5

AW: Stringgrid Einträge in SQL-Tabelle übernehmen

  Alt 31. Okt 2022, 15:16
CopyPaste...Schei...

und ja.

Guck mal auf die Uhr...Heute, 07:59...wir haben heute hier Feiertag.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Stringgrid Einträge in SQL-Tabelle übernehmen

  Alt 31. Okt 2022, 15:58
Nein.
QuoteStr ist für PascalStrings, aber ist und war niemals nicht für SQL-Strings.
Einfaches Beispiel ist das \ welches davon nicht behandelt wird.

Man nehme Parameter oder die EscapeFunktion des DB-Frameworks.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

AW: Stringgrid Einträge in SQL-Tabelle übernehmen

  Alt 31. Okt 2022, 17:07
Genau darum geht es doch.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Stringgrid Einträge in SQL-Tabelle übernehmen

  Alt 31. Okt 2022, 20:01
komisch, vorhin war haentschman ganz bestimmt noch nicht zu sehn
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#9

AW: Stringgrid Einträge in SQL-Tabelle übernehmen

  Alt 1. Nov 2022, 08:52
Zitat:
vorhin war haentschman ganz bestimmt noch nicht zu sehn
...das ist Absicht.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz