![]() |
Datenbank: MS-SQL • Version: 2014 • Zugriff über: SDAC
SDAC insert geräteübergreifend Delphi 10.2.3.
Hallo,
es gelingt mir nicht mit MSConnection + MSQuery in meiner Android-App auf MS-SQL zu schreiben. Es wird nur ein Datensatz mit NULL-Werten erzeugt also die FieldByName Zuweisung wird ignoriert? Unter WIN10 funktioniert das wie immer. Select funktioniert aber unter Windows und Android-App?
Delphi-Quellcode:
Jemand ne Idee wie ich mit SDAC in den SQL-Server schreiben kann?
MSQuery1.Close;
MSQuery1.SQL.Clear; sql_str := 'select * from tab1'; MSQuery1.SQL.Add(sql_str); MSQuery1.Open; try MSQuery1.Append; MSQuery1.FieldByName('cnt').AsInteger := _cnt; MSQuery1.Post; MSQuery1.Close; except on E: Exception do begin ShowMessage('Fehler bei insert: ' E.ClassName + ' ' + E.Message); MSQuery1.Close; end; end; |
AW: SDAC insert geräteübergreifend Delphi 10.2.3.
Hallo,
warum kein einfaches SQL.Add('Insert Into tab1) Was soll das Select * from tab1 und das Open/Append? |
AW: SDAC insert geräteübergreifend Delphi 10.2.3.
Nun ja, ich muss doch erst was selectieren bevor ich was anhängen kann.
Nur meine ich ist es übersichtlicher mit FieldByName := ... den Feldern Daten zuzuweisen. Unter Windows funktioniert das ja auch alles aber warum nicht unter Android? Query.Close; Query.SQL.Text := 'select * from demo where 1=0;'; Query.Open; Query.SQLInsert.Text := 'INSERT Into Demo (demo.wert1) VALUES (12);'; Query.Insert; Query.Post; Werde mal anstatt der Zuweisung MSQuery.FieldByName('cnt').AsSinteger := 1 die Daten direkt in das Insert-Statement packen. Wo ist da eigentlich der Unterschied? Query.SQLInsert.Text := 'INSERT Into tab (cnt) VALUES (1)'; |
AW: SDAC insert geräteübergreifend Delphi 10.2.3.
Für ein Insert muss man nichts selektieren. Insert ist ein SQL-Befehl zum Einfügen von Daten.
Delphi-Quellcode:
query.sql.Text := 'INSERT Into tabellenname (Spaltename) VALUES (wert);';
query.ExecSQL; ![]() |
AW: SDAC insert geräteübergreifend Delphi 10.2.3.
Ein
Delphi-Quellcode:
oder
WHERE false
Delphi-Quellcode:
würde sich an deinem SELECT bestimmt nicht schlecht machen, denn wozu erst die GANZE Tabelle laden, wenn nur etwas eingefügt werden soll.
LIMIT 0
In deinem Fall muß die Query-Komponente automatisch ein INSERT-Statement erzeugen, und da kann man bestimmt über ein Connection-Event oder über eine Logging-Komponente sich mal ausgeben lassen wie dieses INSERT aussieht, welches bei dir ja scheinbar nicht ganz korrekt sein wird. Zitat:
In das Statement kommen keine Values sondern Parameter dein, welche zwischen Insert und Post gefüllt werden, ansonsten Query.SQL.Text und Query.Execute, anstatt soeiner Misshandlung dieser Funktion, um das INSERT-Statement "auszuführen". Und das SQLInsert ist übrigens auch die Lösung, für denn Fall, dass das automatische Erstellen des INSERT-Statements nicht funktioniert. |
AW: SDAC insert geräteübergreifend Delphi 10.2.3.
Zitat:
|
AW: SDAC insert geräteübergreifend Delphi 10.2.3.
Danke, werde jetzt Paramter verwenden obwohl mir noch immer nicht klar ist warum meine ADO Insert Variante mit der FieldByName-Zuweisung dann bisher immer funktioniert hatte?
|
AW: SDAC insert geräteübergreifend Delphi 10.2.3.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 Uhr. |
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