AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SDAC insert geräteübergreifend Delphi 10.2.3.
Thema durchsuchen
Ansicht
Themen-Optionen

SDAC insert geräteübergreifend Delphi 10.2.3.

Ein Thema von jangbu · begonnen am 31. Aug 2018 · letzter Beitrag vom 2. Sep 2018
Antwort Antwort
jangbu

Registriert seit: 6. Apr 2006
171 Beiträge
 
Delphi 10.3 Rio
 
#1

SDAC insert geräteübergreifend Delphi 10.2.3.

  Alt 31. Aug 2018, 19:21
Datenbank: MS-SQL • Version: 2014 • Zugriff über: SDAC
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:
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;
Jemand ne Idee wie ich mit SDAC in den SQL-Server schreiben kann?

Geändert von mkinzler ( 1. Sep 2018 um 11:14 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: SDAC insert geräteübergreifend Delphi 10.2.3.

  Alt 31. Aug 2018, 20:29
Hallo,
warum kein einfaches

SQL.Add('Insert Into tab1)

Was soll das Select * from tab1 und das Open/Append?
Heiko
  Mit Zitat antworten Zitat
jangbu

Registriert seit: 6. Apr 2006
171 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: SDAC insert geräteübergreifend Delphi 10.2.3.

  Alt 1. Sep 2018, 11:09
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)';
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#4

AW: SDAC insert geräteübergreifend Delphi 10.2.3.

  Alt 1. Sep 2018, 19:23
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;
https://www.w3schools.com/sql/sql_insert.asp
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: SDAC insert geräteübergreifend Delphi 10.2.3.

  Alt 1. Sep 2018, 21:04
Ein WHERE false oder LIMIT 0 würde sich an deinem SELECT bestimmt nicht schlecht machen, denn wozu erst die GANZE Tabelle laden, wenn nur etwas eingefügt werden soll.

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.


Delphi-Quellcode:
Query.SQLInsert.Text := 'INSERT Into Demo (demo.wert1) VALUES (12);';
Query.Insert;
Query.Post;
Falsch.

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Sep 2018 um 21:12 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#6

AW: SDAC insert geräteübergreifend Delphi 10.2.3.

  Alt 1. Sep 2018, 21:20
Delphi-Quellcode:
Query.SQLInsert.Text := 'INSERT Into Demo (demo.wert1) VALUES (12);';
Query.Insert;
Query.Post;
Falsch.

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.
Das ist aber kein Zitat von mir. Und dass man eigentlich Parameter nutzt ist mir auch klar. Wollte aber erstmal nur drauf hinweisen, dass SQL über sowas wie Insert verfügt und dass man das andere Brumborium für das Einfügen von Datensätzen nicht benötigt.
  Mit Zitat antworten Zitat
jangbu

Registriert seit: 6. Apr 2006
171 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: SDAC insert geräteübergreifend Delphi 10.2.3.

  Alt 2. Sep 2018, 15:24
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?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#8

AW: SDAC insert geräteübergreifend Delphi 10.2.3.

  Alt 2. Sep 2018, 16:07
obwohl mir noch immer nicht klar ist warum meine ADO Insert Variante mit der FieldByName-Zuweisung dann bisher immer funktioniert hatte?
Die meisten Datenzugriffskomponenten bauen sich anhand der Select-Anweisung selbst eine Insert- bzw. Update-Anweisung zusammen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 03:05 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