Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   ADOQuery SQL Parameter keine Übergabe (https://www.delphipraxis.net/158895-adoquery-sql-parameter-keine-uebergabe.html)

daredd 7. Mär 2011 11:21

Datenbank: ACCESS • Version: 2003 • Zugriff über: ADO

ADOQuery SQL Parameter keine Übergabe
 
Hallo Peopz,

kann mir einer weiterhelfen. Ich versuche mit einer ADOQuery eine Tabelle zu füllen:
Delphi-Quellcode:
procedure TForm2.New_Warenbestand(table1, table2: TADOTable); //Neuer Artikel in Warenbestand (KOMSA)
var
i :Integer;
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('INSERT INTO Warenbestand(products_id, external_id, permission_id, products_owner, products_ean, products_quantity, products_average_quantity,'
+'products_shippingtime, products_model, products_master_model, products_master_flag, products_option_template, products_option_list_template,'
+'products_sort, products_image, products_price, date_added, last_modified, date_available, products_weight, products_status, products_tax_class_id,'
+'product_template, product_list_template, manufacturers_id, products_ordered, products_transactions, products_fsk18, products_vpe, products_vpe_status,'
+'products_vpe_value, products_startpage, products_startpage_sort, products_average_rating, products_rating_count, products_digital,'
+'products_serials, categories, products_description_de, products_name_de, products_short_description_de, url_text_de, meta_title_de, meta_keywords_de,'
+'meta_description_de, products_description_en, products_name_en, products_short_description_en, url_text_en, meta_title_en, meta_keywords_en, meta_description_en)');
ADOQuery1.SQL.Add('VALUES(:products_id, :external_id, :permission_id, :products_owner, :products_ean, :products_quantity, :products_average_quantity,'
+':products_shippingtime, :products_model, :products_master_model, :products_master_flag, :products_option_template, :products_option_list_template,'
+':products_sort, :products_image, :products_price, :date_added, :last_modified, :date_available, :products_weight, :products_status, :products_tax_class_id,'
+':product_template, :product_list_template, :manufacturers_id, :products_ordered, :products_transactions, :products_fsk18, :products_vpe, :products_vpe_status,'
+':products_vpe_value, :products_startpage, :products_startpage_sort, :products_average_rating, :products_rating_count, :products_digital,'
+':products_serials, :categories, :products_description_de, :products_name_de, :products_short_description_de, :url_text_de, :meta_title_de, :meta_keywords_de,'
+':meta_description_de, :products_description_en, :products_name_en, :products_short_description_en, :url_text_en, :meta_title_en, :meta_keywords_en, :meta_description_en)');
i := TableStepBack(table2);
ADOQuery1.Parameters.ParamByName('products_id').Value := i; //hier übergebe ich einen Wert, aber der Debugger mekkat! 
ADOQuery1.Parameters.ParamByName('external_id').Value := table1.FieldByName('ARTIKELNUMMER').AsString;
ADOQuery1.Parameters.ParamByName('permission_id').Value := '0';
ADOQuery1.Parameters.ParamByName('products_owner').Value := '1';
.
.
.
ADOQuery1.ExecSQL;
ADOQuery1.Active := true;
end;
Und bei ADOQuery1.Active sagt mir der Debugger:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt DatenZugriff.exe ist eine Exception der Klasse EOleException mit der Meldung 'Sie müssen einen Wert in das Feld 'Warenbestand.products_id' eingeben' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

Obwohl ich einen Wert an 'products_id' übergeben, nämlich i. Was ist hier faul?

DeddyH 7. Mär 2011 11:27

AW: ADOQuery SQL Parameter keine Übergabe
 
Und was "mekkat" der Compiler? Außerdem: entweder Active auf true oder Open/ExecSQL, aber nicht beides.

Sir Rufo 7. Mär 2011 11:29

AW: ADOQuery SQL Parameter keine Übergabe
 
Dieses SQL-Statement liefert doch keine Daten zurück.
Es wird ausgeführt (der Name lässt es ja auch schon vermuten) mit
Delphi-Quellcode:
ExecSQL
Ein
Delphi-Quellcode:
Active := True
ist dabei unsinnig und falsch, weil nun das Statement nochmals ausgeführt wird und ein ResultSet erwartet wird, was es aber nicht gibt.
Ist auf der Spalte
Code:
products_id
auch noch ein Unique-Index dann rummst es dort auch noch.

Kontrollier doch mal die DB, denn die Werte sollten dann drinstehen (wenn es erst nach dem ExecSQL knallt)

daredd 7. Mär 2011 11:30

AW: ADOQuery SQL Parameter keine Übergabe
 
Danke für den Tipp, wie gesagt ich bekomme die Meldung:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt DatenZugriff.exe ist eine Exception der Klasse EOleException mit der Meldung 'Sie müssen einen Wert in das Feld 'Warenbestand.products_id' eingeben' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

Der Compiler meckert nicht.

Sir Rufo 7. Mär 2011 11:33

AW: ADOQuery SQL Parameter keine Übergabe
 
Es lohnt sich übrigens immer ein Blick in die Online-Hilfe

DeddyH 7. Mär 2011 11:33

AW: ADOQuery SQL Parameter keine Übergabe
 
Hast Du die "Active"-Zeile denn jetzt rausgenommen?

daredd 7. Mär 2011 11:35

AW: ADOQuery SQL Parameter keine Übergabe
 
Zitat:

Zitat von Sir Rufo (Beitrag 1086415)
Dieses SQL-Statement liefert doch keine Daten zurück.
Es wird ausgeführt (der Name lässt es ja auch schon vermuten) mit
Delphi-Quellcode:
ExecSQL
Ein
Delphi-Quellcode:
Active := True
ist dabei unsinnig und falsch, weil nun das Statement nochmals ausgeführt wird und ein ResultSet erwartet wird, was es aber nicht gibt.
Ist auf der Spalte
Code:
products_id
auch noch ein Unique-Index dann rummst es dort auch noch.

Kontrollier doch mal die DB, denn die Werte sollten dann drinstehen (wenn es erst nach dem ExecSQL knallt)

Ja, die Spalte products_id ist ein Unique-Index! Ich habe ADOQuery1.Active := true, entfernt und arbeite nur noch mit einem ExecSQL, trotzdem kommt die Meldung:' Wert für products_id fehlt...'

DeddyH 7. Mär 2011 11:37

AW: ADOQuery SQL Parameter keine Übergabe
 
Handelt es sich um einen Autowert? Den müsstest Du gar nicht übergeben.

daredd 7. Mär 2011 11:51

AW: ADOQuery SQL Parameter keine Übergabe
 
Also, leider wird der Wert nicht automatisch übergeben. Es ist in Access definiert 'Eindeutig', vorher war auch noch 'Ist erforderlich', das hab ich mal weggenommen und nun kommt folgende Meldung:
'Nullwert in Index oder Primär-Schlüssel nicht möglich'

Wie kann ich den eine automatische Wert setzen, habt das ganze mit eine Variable gelöst (i), die wird so ermittelt:

Delphi-Quellcode:
function TableStepBack(table :TADOTable) :Integer;  //ID-nummer Ermitteln
var
s :Integer;
begin
  table.Last;
  Result := table.FieldByName('products_id').AsInteger + 1;
end;

DeddyH 7. Mär 2011 12:07

AW: ADOQuery SQL Parameter keine Übergabe
 
Damit das überhaupt funktionieren kann, muss die Tabelle auf jeden Fall aktuell und nach der ID sortiert sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.
Seite 1 von 5  1 23     Letzte »    

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