Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi INSERT INTO & MS Access (https://www.delphipraxis.net/92102-insert-into-ms-access.html)

Moony 15. Mai 2007 12:44

Re: INSERT INTO & MS Access
 
@marabu: Es verstößt nicht gegen die Regeln....Die Tabelle wird tausendmal anderweitig verwendet. Ich lese die Feldnamen vorher aus der Accesstabelle aus und übergebe diese dann an den SQL-String folgendermaßen:

Delphi-Quellcode:
Lst := TStringList.Create;
try
  for n := 0 to myaccessDS.FieldCount - 1 do
  begin
    if (Pos('Logo', myaccessDS.Fields.Fields[n].FieldName) = 0) then
      Lst.Add(myaccessDS.Fields.Fields[n].FieldName);
  end;
finally
  myFields := Lst.Commatext;
  Lst.Free;
end;

...

while not MySQLDS.Eof do
begin
  myValues := AnsiQuotedStr(mySQLds.FieldByName('Category').AsString, #39) +',';
  myValues := myValues + AnsiQuotedStr(mySQLds.FieldByName('Name').AsString, #39) +',';
  ...
  SQL := 'INSERT INTO race00 (' + myFields + ') VALUES (' + myValues + ')';
  try
    if myaccessDB.Connected then
    begin
      myaccessComm.CommandText := SQL;
      myaccessComm.Execute;
    end;
  except
  end;
end;
Das mySQLDS besitzt mindestens alle Felder, welche in der Accesstabelle vorhanden sind und mehr.


@hoika: Welche Parameter?

mkinzler 15. Mai 2007 13:03

Re: INSERT INTO & MS Access
 
Zitat:

@hoika: Welche Parameter?
Zitat SQL-Parameter:
SQL-Code:
INSERT INTO myTable (Feld1,Feld2,Feld3,Feld4,Feld5,Feld6,Feld7) VALUES (:wert1, :wert2, ...);
Delphi-Quellcode:
myCommand.Parameters.ParamByName('wert1).Value := ...;

Moony 15. Mai 2007 13:14

Re: INSERT INTO & MS Access
 
Welchen Sinn hat diese Abfrage. davon abgesehen verstehe ich nicht was ich mit der Zuweisung des Doppelpunkts und die von Parambyname machen soll. :?

hoika 15. Mai 2007 13:21

Re: INSERT INTO & MS Access
 
Moonly,

wenn du schon dein SQL-Statement in einer String-Variable
stehen hast, dann sehe die dir doch in dem Debugger mal an.

Ist ziemlich durcheinander dein Code ;)
die Felder sind alle Felder mit LogoX,
die Werte holst du dir aus Category.Wenn jetzt weniger Category als Logo-Felder
existieren, knallt es auf jeden Fall.

Ausserdem rufst du die Insert-Query für jeden Datensatz
in MySQLDS einmal auf, ist das gewollt ?

Vielleicht steht ganz hinten (vor der Schliessenklammer) des Value
laut deinem Code ein Komma zu viel.


Was steht denn nun direkt in der Abfrage (SQL)?


Heiko
PS: mit Parametern ( : ) kannst du das QuotedStr weglassen,
das macht das AsString selber.

mkinzler 15. Mai 2007 13:22

Re: INSERT INTO & MS Access
 
In der Abfrage stellt man nur parameter ein. Diese erkennt man an dem vorangestellten Doppelpunkt. Später füllt man diese mit Werten.
Vorteile:
-Format der Werte wird anhand der Parameter gesetzt -< Keine Quoten nötig
-Abfrage kann öfters verwendet werden und nur die Parameter werden an das DBMS übertragen.

Moony 15. Mai 2007 15:14

Re: INSERT INTO & MS Access
 
@hoika:
1. Wenn du aufgepasst hättest, dann würdest du im source auch sehen, dass ich alle Felder einlese bei denen es NICHT LOGO heißt! Ich hole mir nur einen Wert aus einem anderen Dataset aus einem bestimmten Feld. Diese Felder existieren auch mit 100%iger Sicherheit.

2. Jeder Datensatz soll einzeln eingefügt werden

3. Im Insert-Befehl steht alles vollkommen richtig drin, denn ich habe mir meine SQL-Variable beobachtet, habe den Wert dieser
kopiert und in der Accesstablle direkt als Abfrage eingefügt, und hier funktioniert der Befehle wenn ich diesen ausführe.

@kinzler:
Wenn ich erst die parameter setze und dann erst die Werte dann brauche ich doppelt soviel source. außerdem hat das bis jetzt bei all meinen tausenden von abragen immer so geklappt.

mkinzler 15. Mai 2007 15:29

Re: INSERT INTO & MS Access
 
Du mußt die Abfrage ja nur einmal setzen. In der Schleife brauchst du nur noch die Parameter setzen.

Moony 15. Mai 2007 15:33

Re: INSERT INTO & MS Access
 
das kommt doch aufs gleiche raus ob ich zusätzlich die parameter setze oder ob ich von vornherein die einzelnen werte setze, oder sehe ich das falsch?


nichts desto trotz bleibt dennoch der fehler bestehen...

mkinzler 15. Mai 2007 15:38

Re: INSERT INTO & MS Access
 
Zitat:

das kommt doch aufs gleiche raus ob ich zusätzlich die parameter setze oder ob ich von vornherein die einzelnen werte setze, oder sehe ich das falsch?
-Wieviele Inserts werden eingefügt? Die Abfrage muß nur einmal gesetzt werden (z.B. fix oder im Programmanfang) bei den einzelnen Inserts müssen nur die Parameter gefüllt werden.
-Man muß Typen nicht beachten
-Abfrage ist übersichtlicher.

Moony 15. Mai 2007 16:05

Re: INSERT INTO & MS Access
 
Die Anzahl der Inserts hängt von der Datenmenge ab. Das könnte schon bis zu den 100000en führen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 Uhr.
Seite 2 von 4     12 34      

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-2025 by Thomas Breitkreuz