Entwickler-Ecke

Datenbanken - SQL-Abfrage


Hänsel - Fr 13.01.23 11:18
Titel: SQL-Abfrage
Hallo, kann mir hier jemand Unterstützung geben?

Ich arbeite mit einer MSSQL-DB und möchte Datensätze Filtern und ein Feldinhalt ändern.


Delphi-Quelltext
1:
2:
3:
bez:= 10520;
au:= 'A';
DataModule1.ADOQuery_Einlesung.SQL.Text:='Select * From MGV1  Where Objekt_nr ='+bez+' and  Auszug = '''+au+'''';

soweit alles klar. Wenn ich aber beim Feld Auszug alle sehen möchte die z.B. <> au sind, das geht so nicht. Wie dann?

Da ich auch noch Felder ändern möchte, hatte ich gedacht, dies mit UPDATE zu machen. Danach kann eine normale Abfrage besser erfolgen.


Delphi-Quelltext
1:
2:
3:
bez:=DataModule1.ADOQuery_Objekte['OBJ'];
St:='B';
au:= 'I';

Beim Update sollte in der Tabelle MGV nach dem Feld obj = bez und Status= st gefiltert werden und alle die beim Feld Auszug (au) kein 'A' haben mit dem Wert 'I' ersetzt.


Delphi-Quelltext
1:
DataModule1.ADOQuery_Einlesung.SQL.Text:='Update MGV set  ????                    

Kann jemand mir weiter helfen?

Danke im Voraus
hänsel

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Th69 - Fr 13.01.23 13:26

Meinst du folgendes?

SQL-Anweisung
1:
update MGV set Auszug = 'I' where Object_nr = :bez and Status = :st and Auszug <> 'A'                    

Mußt es dann nur noch in deinen Delphi-Code einbauen, sinnvollerweise gleich mit SQL-Parametern, s. z.B. SQL Parameterübergabe [https://www.delphipraxis.net/152692-sql-parameteruebergabe.html].


Hänsel - Fr 13.01.23 16:06

Danke, habe es ausprobiert und noch nicht den richtigen Erfolg:
das geht nicht

Delphi-Quelltext
1:
2:
3:
4:
5:
DataModule1.ADOQuery_Einlesung.SQL.Text:='update MGV1 set Auszug =:Auszug where Objekt_nr =:bez and  Auszug <>:As ' ;
DataModule1.ADOQuery_Einlesung.Parameters.ParamByName('Auszug').Value := 'I';
DataModule1.ADOQuery_Einlesung.Parameters.ParamByName('AS').Value := 'A';
DataModule1.ADOQuery_Einlesung.Parameters.ParamByName('bez').Value := DataModule1.ADOQuery_Objekte['OBJ'];
DataModule1.ADOQuery_Einlesung.ExecSQL;
So geht das aber ich benötige ja ...Auszug <>As

Delphi-Quelltext
1:
2:
3:
4:
5:
DataModule1.ADOQuery_Einlesung.SQL.Text:='update MGV1 set Auszug =:Auszug where Objekt_nr =:bez'// and  Auszug <>:As ' ;
DataModule1.ADOQuery_Einlesung.Parameters.ParamByName('Auszug').Value := 'I';
DataModule1.ADOQuery_Einlesung.Parameters.ParamByName('AS').Value := 'A';
DataModule1.ADOQuery_Einlesung.Parameters.ParamByName('bez').Value := DataModule1.ADOQuery_Objekte['OBJ'];
DataModule1.ADOQuery_Einlesung.ExecSQL;

Gruß hänsel

Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt


Th69 - Fr 13.01.23 16:22

Was genau geht nicht? Erhältst du eine Fehlermeldung oder werden keine Daten in der DB verändert?

Ich bin mir nicht sicher, ob die Parameter unterschiedliche Groß-/Kleinschreibung akzeptieren (:As <-> AS).

PS: Bitte füge demnächst selber die Code (bzw. Delphi) Tags hinzu.


Hänsel - Fr 13.01.23 19:57

Eine Fehlermeldung gibt es nicht. Es werden aber auch keine Daten in die DB geschrieben. Mit dem groß bzw. klein Schreibung habe ich auch ausprobiert. Leider kein Erfolg.
Trotzdem besten Dank für deine Mühe. Ich werde es eventuell mit einer Abfrageschleife mal versuchen, das dauert aber etwas länger.

MFG
hänsel


Th69 - Sa 14.01.23 11:53

Klappt denn die Abfrage

SQL-Anweisung
1:
Select * From MGV1 Where Objekt_nr = '10520' and Auszug <> 'A'                    

direkt aus dem SQL Management Studio?
Oder welchen Datentyp hat die Spalte "Auszug", daß es mit = funktioniert, aber mit <> scheinbar nicht?


Sinspin - Di 17.01.23 08:48

Hallo.
Mach es doch erstmal anders. Hart codiert ohne Parameter.
Wenn das geht dann ersetz stück für stück durch Parameter.