Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit ADO und Providerflags (https://www.delphipraxis.net/46089-problem-mit-ado-und-providerflags.html)

alzaimar 18. Mai 2005 10:57

Datenbank: MS-SQL • Version: 2000 • Zugriff über: ADO

Problem mit ADO und Providerflags
 
Einfaches Szenario:
MS-SQL (vermutlich auch andere DB)
TADOTable (oder TADOQuery, egal)
Eine Tabelle (ein Identitiy-Feld ID, der Rest sind Info-Felder)
Alles mit der DB verknippern und Felder importieren.

Ich will, das ADO beim Updaten zum Server folgenden SQL-Befehl schickt:
SQL-Code:
UPDATE MyTable Set Foo='Foo' WHERE ID=12345
Bzw. über die sp_ExecuteSQL stored procedure...
Es geht eigentlich nur um die WHERE Klausel, nämlich, das nur das ID-Feld als Kriterium benutzt wird. In der Delphi-Hilfe steht dazu, das die ProviderFlags des ID-TFields auf [pfInWhere], und die aller anderen Felder auf [pfInUpdate] gesetzt werden sollen. Klingt logisch. Klappt aber nicht. Egal, was ich wo einstelle, ADO schickt immer den Befehl:
SQL-Code:
UPDATE MyTable Set Foo='Foo' WHERE ID=12345 and Foo='Bar' <--Alter Wert von Foo
Irgendwie soll das angeblich über die ADO-Properties gehen. Gut ist, wenn man die MSDN-CDs hat, oder die ADO-Hilfe von MS. Hab ich aber nicht.

HIIIIIIIILLLLLLLLFFFFFFFFEEEEEEEEE!
:wall: :wall: :wall: :wall: :wall: :wall:

marabu 18. Mai 2005 12:07

Re: Problem mit ADO und Providerflags
 
Zitat:

Zitat von alzaimar
In der Delphi-Hilfe steht dazu, das die ProviderFlags des ID-TFields auf "pfInWhere", und die aller anderen Felder auf "pfInUpdate" gesetzt werden sollen. Klingt logisch. Klappt aber nicht.

Arbeitest du denn mit MIDAS?

Zitat:

Zitat von Borland
ProviderFlags ist nur für Felder in Datenpaketen von Bedeutung, die für eine Ereignisbehandlungsroutine der Provider-Komponente bereitgestellt werden.

Grüße vom marabu

alzaimar 18. Mai 2005 12:28

Re: Problem mit ADO und Providerflags
 
:oops: Nee, natürlich nich. Das erklärt zumindest, warum es nicht geht. Ähem...Räusper..
Aber, wie verdammt noch mal, bekomme ich dieses %§$§&/&/-ADO dazu, mir meine WHERE-Klausel so hinzubiegen, wie ich sie nun mal gerne hätte. Das muss doch gehen...

shmia 18. Mai 2005 14:17

Re: Problem mit ADO und Providerflags
 
Zitat:

Zitat von alzaimar
Es geht eigentlich nur um die WHERE Klausel, nämlich, das nur das ID-Feld als Kriterium benutzt wird. In der Delphi-Hilfe steht dazu, das die ProviderFlags des ID-TFields auf [pfInWhere], und die aller anderen Felder auf [pfInUpdate] gesetzt werden sollen. Klingt logisch. Klappt aber nicht.

Wenn man in der Unit ADODB.pas nach ProviderFlags oder pfInUpdate sucht, findet man nix.
Ergo: ADO Express kümmert sich nicht um die [TField].ProviderFlags. :(

alzaimar 18. Mai 2005 14:25

Re: Problem mit ADO und Providerflags
 
Alter Schwede, und ich dachte ich wäre immer schlau: Da mal reinzuschauen, hätte nix geschadet. Aber es bleibt die offene Frage, die mich in den Wahnsinn treibt:
Wie bringe ich dieses ADO-Zeugs dazu, eine saubere UPDATE Anweisung an den Server zu schicken. Es kann doch wohl nicht sein, das ADO grundsätzlich und immer diese hirnkranken Updates hinbastelt. Man könnt' ja glatt denken, irgend ein Redmondfrickler hätte sich das ausgedacht und .... moment mal, jetzt wird mir einiges klar...

Trotzdem, gibt es denn keinen in der Community hier, der Ahnung von ADO hat?

Ich vermute:
ADO = Alles Dämliche Objekte

r_kerber 18. Mai 2005 17:36

Re: Problem mit ADO und Providerflags
 
Also, ich kann Dir sagen, daß Updates mit ADO funktionieren und zwar ohne großartig an irgendwelchen Einstellungen herumzuspielen. Es wäre sinnvoll, wenn Du uns nicht so ein paar SQL-Brocken hinwirfst sondern auch mal die relevanten Stellen in Deinem Delphi-Programm zeigst.

alzaimar 18. Mai 2005 19:20

Re: Problem mit ADO und Providerflags
 
Wenn es Dir weiterhilft:
Delphi-Quellcode:
AdoTable1.Edit;
AdoTable1['Foo'] := 'Bla';
AdoTable1.Post;
Im SQL-Profiler sehe ich etwas, das äquivalent hierzu ist:
SQL-Code:
Update <Table> set Foo='Bla' Where ID=12345 and Foo='Old Value'
Wieso steht in der WHERE-Klausel '... and Foo='Old Value'? Also, warum das da steht, kann ich mir denken, aber, wie bekomme ich es *WEG*.
Aber das stand eigentlich Alles so schon in meiner Frage.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 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