Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Problem mit SQL --> Fehlermeldung: Invalid parameter (https://www.delphipraxis.net/150351-problem-mit-sql-fehlermeldung-invalid-parameter.html)

alex-91 14. Apr 2010 16:07

Datenbank: Pradox 7 • Zugriff über: BDE

Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Hallo !
Ich hab auch ein Problem mit SQL :(
Also: Ich habe in der Schule Programmieren und lerne nun das 4. Jahr Delphi. Zur Matura ( = Abi) muss ich ein Projekt machen. Und zwar ist dass ein Datenbankprogramm das helfen soll elektronische Geräte zu katalogisieren und zu verwalten.
(Delphi 7, BDE, Paradox 7)

Nun möchte ich die Option anbieten, zBsp. einen neuen Beamer in die Datenbank hinzuzufügen.
Hier einmal der Quelltext:

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
inventarnummer, raumnummer : integer;
name, raumbezeichnung : string;
begin
nummer:=strtoint(Edit1.Text);
raumnummer:=strtoint(Edit2.Text);
raumbezeichnung:=Edit3.Text;
name:=Edit4.Text;

Query1.Active:=false;
Query1.SQL.Clear;
Query1.SQl.Add('INSERT INTO Räume VALUES ('+inttostr(raumnummer)+','+(raumbezeichnung)+')');
Query1.ExecSQL;
Query1.Active:=true;

Query1.Active:=false;
Query1.SQL.Clear;
Query1.SQl.Add('INSERT INTO Inventarnummern (inventarnummer) VALUES ('+inttostr(inventarnummer)+')');
Query1.ExecSQL;
Query1.Active:=true;
Wenn ich nun das Programm ausführe gibt es keine Probleme. Ich kann die Daten in die Edits eingeben. Aber wenn ich dann auf den Button drücke kommt die fehlermeldung :
ProjectProject1.exe raised exception class EDBEngineError with message 'Invalid parameter.'. Process stopped. Use Step or Run to continue.

ein grüner Pfeil steht dann beim 2. Query1.Active:=false;
Hab bereits einen klassenkollegen befragt, er hat ein ähnliches programm sieht aber den fehler nicht
Ich hoffe ich habe nichts falsch gemacht und ihr könnt mir helfen ...

liebe Grüße
alex-91

Bernhard Geyer 14. Apr 2010 16:10

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Eine Query die ein INSERT/UPDATE-Statement beinhaltet kannst du nicht mit .Active "aktiv" schalten. Diese werden per ExecSQL ausgeführt.
".Active" erwartet einen Ergebniscurser einer SELECT-Anweisung.

mkinzler 14. Apr 2010 16:12

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Zudem würde sich hier parametrisierte Abfragen anbieten

alex-91 14. Apr 2010 16:17

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Seit mir bitte nicht böse für die blöden Fragen aber :
wenn ich die
[delphi]Query1.Active:=true;[/delphi weggebe] , kommt der Fehler noch immer :(


und was ist gemeint mit parametisierter abfrage ? :?:

lg

mkinzler 14. Apr 2010 16:19

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Akzeptiert den die BDE/Paradox Umlaute in Datenbankobjekten?
Heisst die Tabelle wirlich Räume?

alex-91 14. Apr 2010 16:23

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Die tabelle hat wirkliche Räume.db geheißen.
Hab jtz das Ä durch ein A ersetzt und hab leider das Problem nachwievor :cry:

mkinzler 14. Apr 2010 16:24

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
In welcher Codezeile tritt den der Fehler auf?

Bernhard Geyer 14. Apr 2010 16:27

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Hallo? Und was ist mit meinem Hinweis?

Nochmal etwas anders Beschrieben. Lösche Zeile
Delphi-Quellcode:
Query1.Active:=true;
Und gut ist. Erklärung Post #2

alex-91 14. Apr 2010 16:32

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Der Erste SQL-Block dürfet funktionieren. Es hat auch schon ein paar mal, wenn auch falsch, etwas in die Tabelle geschrieben. Das Problem tritt dann vermutlich beim 2.
Delphi-Quellcode:
 Query1.Active:=false;
auf ...

Jürgen Thomas 14. Apr 2010 16:35

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Hallo,

der ursprüngliche Fehler liegt vermutlich daran, dass du eine Zahl in Hochkommata setzt. Das darf nicht sein! Auch steht in der ersten SQL-Anweisung eine Variable in Klammern, aber das dürfte unproblematisch sein.

Genau deshalb gibt es die Empfehlung, mit Parametern zu arbeiten. Das ist zwar am Anfang eine Umstellung und sieht komplizierter aus; es vermeidet aber Unmengen von Problemen.

Benutze einfach die Forumssuche z.B. nach "Abfragen mit Parametern" o.ä.

Gruß Jürgen

// Asche auf mein Haupt, die vielen Hochkommata haben mich offensichtlich verwirrt. Noch ein Argument mehr für Parameter :wink:

alex-91 14. Apr 2010 16:41

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Ok also:

Die zeile Query1.Active:=true; löschen bringt leider nichts.
und ja die hochkomma braucht man ja für di stringmanipulation oder ?
alles was in der zeile von INSER INTO steht sind variablen ... oda hab ich jtz die antwort nicht gecheckt :(

mkinzler 14. Apr 2010 16:47

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Wie gesagt nimm Parameter:
Delphi-Quellcode:
Query1.SQl.Text := 'INSERT INTO Räume VALUES (:raumnummer, :raumbezeichnung)';
Query1.ParamByName('raumnummer').Value := raumnummer;
...
Query1.ExecSQL;

alex-91 14. Apr 2010 16:55

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
hätte das jz mit parametern probiert , leider noch immer die selbe blöde fehlermeldung ='(

DeddyH 14. Apr 2010 16:56

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Zeig doch mal den ganzen (relevanten) Code.

shmia 14. Apr 2010 16:57

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
...und vermeide deutsche Umlaute in Tabellen- und Feldnamen!
Das kann dich irgendwann ist den Südpol beisen indem z.B. Fehlermeldung erscheinen, die man sich nicht erklären kann.

DeddyH 14. Apr 2010 16:58

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Jo, das kommt noch strafverschärfend hinzu (ich wusste gar nicht, dass Paradox das überhaupt zulässt).

alex-91 14. Apr 2010 17:06

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
ursprünglich hät ich das so geplant:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var inventarnummer, raumnummer : integer;
name, raumbezeichnung, baujahr : string;
begin
inventarnummer:=strtoint(Edit1.Text);
raumnummer:=strtoint(Edit2.Text);
raumbezeichnung:=Edit3.Text;
name:=Edit4.Text;
baujahr:=Edit5.Text;

Query1.Active:=false:
Query1.SQL.Clear;
Query1.SQl.Add('INSERT INTO Raume VALUES ('+inttostr(raumnummer)+','+raumbezeichnung+')');
Query1.ExecSQL;

Query1.Active:=false;
Query1.SQL.Clear;
Query1.SQl.Add('INSERT INTO B-Details VALUES ('+name+','+baujahr+');
Query1.ExecSQL;

Query1.Active:=false;
Query1.SQL.Clear;
Query1.SQl.Add:=('INSERT INTO Inventarnummern (inventarnummer) VALUES ('+nummer+')');
Query1.ExecSQL;

end;

shmia 14. Apr 2010 17:35

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
SQL-Code:
INSERT INTO B-Details...
Das wäre dann eine Subtraktion anstelle eines korrekten Tabellennamens.
Erlaubt sind nur Buchstaben, Ziffern und der Unterstrich.
Denk' einfach die Tabellen- und Feldnamen wäre Variablennamen ("Bezeichner") von Pascal.
Dann siehst du schnell was erlaubt ist und was nicht.

alex-91 14. Apr 2010 17:48

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
hey shmia
danke für den vorschlag, hab das jz zur sicherheit einmal gemacht , hat aber leider nichts gebracht :(

und irgendwie dürfte etwas am Query1.ExecSQL; stören. Das kann doch gar nicht sein oder ?
Wenn ichs weg mach kommt keine fehlermeldung dafür passiert dann halt auch logischer weise nichts wenn man auf den button klickt...

mkinzler 14. Apr 2010 17:53

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Was spricht den gegen die Verwendunf von Parametern

alex-91 14. Apr 2010 18:01

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
auch mit denen kommt die selbe fehlermeldung :(
habs eh kurz mal umgeschrieben , leider ohne erfolg ...

DeddyH 14. Apr 2010 18:10

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
  inventarnummer, raumnummer : integer;
  name, raumbezeichnung, baujahr : string;
begin
  inventarnummer:=strtoint(Edit1.Text);
  raumnummer:=strtoint(Edit2.Text);
  raumbezeichnung:=Edit3.Text;
  name:=Edit4.Text;
  baujahr:=Edit5.Text;

  Query1.SQL.Text := 'INSERT INTO Raume VALUES (:raumnummer,:raumbezeichnung)';
  Query1.ParamByName('raumnummer').Value := raumnummer;
  Query1.ParamByName('raumbezeichnung').Value := raumbezeichnung;
  Query1.ExecSQL;

end;
Wie sieht es so aus?

[edit] Übrigens ist "name" ein schlechter Bezeichner, da jede Komponente auch über eine gleichnamige Property verfügt, nicht, dass da der Compiler durcheinanderkommt. [/edit]

alex-91 14. Apr 2010 18:28

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
nein leider auch nicht -.-
irgendwas passt an Qery1.ExecSQL; nicht :(

mkinzler 14. Apr 2010 18:30

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Ist Query1 über eine Session verbunden oder per ist nur .DataBaseName konfiguriert?

alex-91 14. Apr 2010 18:37

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
garnichts von beidem ?! :oops:

was muss denn bei .DatabaseName drinnen stehen ?

mkinzler 14. Apr 2010 18:44

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Der Pfad zu den Datenbankdateien

Medium 14. Apr 2010 18:46

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Besser: In der BDE Verwaltung einen Alias für die DB anlegen, und den Alias da rein. Woher sollte die Komponente sonst wissen, welche DB es nun durchwühlen soll? (Und mittelfristig: BDE nicht benutzen)

alex-91 14. Apr 2010 18:49

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
@ mkinzler:
welche datnebankdateien ?

@ Medium:
kannst du mir erklären wie das funktionier?
ham das noch nie gemacht und nur BDE kennengelernt ....

mkinzler 14. Apr 2010 18:55

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Datenbankdateien: db, mdx, px, ...
Aliase:4In der Systemsteuerung gibt es die BDE Verwaltung. Dort kann man sprechende Namen für den Pfad anlegen.

alex-91 14. Apr 2010 19:06

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Systemsteuerung ?
bitte etwas genauer :oops: ...
anleitung wär am coolsten ...

mkinzler 14. Apr 2010 19:09

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Du kennst die Systemsteuerung nicht? :shock:
Start->Einstellungen->Systemsteuerung->BDE-Verwaltung

alex-91 14. Apr 2010 19:19

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
asooooo DIE systemsteuerung kenn ich schon =) *stolz bin*
aber ich wusste nicht, dass da ein BDE Administrator ist.

und was muss ich jz mid dem machen ??

Medium 14. Apr 2010 19:23

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Einen Alias anlegen. Ich dachte, das wäre gelegentlich erwähnt worden.

alex-91 14. Apr 2010 19:24

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
ja sicher ich habe keine ahnung wie :oops:

alex-91 14. Apr 2010 20:01

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
kann mir bitte wer sagen wie das geht ?*hiiiiilfe*

mkinzler 14. Apr 2010 20:04

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Wie hast du den die Tabellen angelegt? Bzw. hast du diese angelegt?
http://www.delphi-treff.de/tutorials...nstieg/page/1/

alex-91 14. Apr 2010 20:09

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
mit dem database desktop , ganz "normal" =)
BDE , Paradox 7 .... ganz normal =)

mkinzler 14. Apr 2010 22:19

Re: Problem mit SQL --> Fehlermeldung: Invalid parameter
 
Liste der Anhänge anzeigen (Anzahl: 2)
Anlegen eines neuen Alias
-Rechtsklick auf Datenbanken->Neu ( Bild1)
-Art Standard (Bild2)
-Namen Vergeben und Pfad auswählen (Bild3)
-Übernehmen


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