Variable im BeforePost übergebn??
Moderator: SYNERPY
-
- Beiträge: 106
- Registriert: Di Nov 02, 2004 1:35 pm
Variable im BeforePost übergebn??
Hallo @ all,
zunächst einmal, ich bin mir nicht sicher ob der Post hier richtig ist, könnte durchaus auch in den SQL-Berich gehören...
Also ich habe folgendes Problem:
Neue Tabelle angelegt, und möchte jetzt in einer anderen Tabelle per BeforePost antriggern, dass in der neuen Tabelle ein Datensatz angelegt wird. Funktioniert auch soweit alles. Nur irgendwie bekomme ich es nicht hin, dass die Variable für den Eintrag richtig übergeben wird.
Der Code sieht folgendermaßen aus:
sMK := E_LFKNR.Field.Value;
MySQL := frmdata.universal;
MySQL.Close();
MySQL.SQL.Text := 'insert into BLFK (ID, "Maskenkey") Values (NULL, :sMK)';
MySQL.Open();
MySQL.Close();
Wenn das ganze jetzt ausgeführt wird, legt er mir einen DS in der Tabelle BLFK an, füllt alle Felder brav aus, nur der Maskenkey(in den der Wert der Variable sMK eingetragen werden soll) bleibt leer.
Also an der Variablenfüllung kanns eigentlich nicht liegen. Wenn ich mir den Wert in einer MSGBOX ausgeben lasse stimmt der Wert immer. An der Insert-Anweisung kann es eigentlich auch nicht hängen.
Wenn ich die Variable durch einen Wert ersteze z.B. so:
MySQL.SQL.Text := 'insert into BLFK (ID, "Maskenkey") Values (NULL, 182)';
dann wird alles korrekt ausgeführt und es steht 182 im Maskenkey mit drin.
Ich hab das ganze schon mit String zusammenbauen, konvertieren in die verschiedensten Typen und was weiß ich nicht alles versucht. Aber ich kriegs einfach nicht hin.
Hat jemand irgendeine Idee??
Bin für jede Hilfe dankbar
Gruß
Vegeta
zunächst einmal, ich bin mir nicht sicher ob der Post hier richtig ist, könnte durchaus auch in den SQL-Berich gehören...
Also ich habe folgendes Problem:
Neue Tabelle angelegt, und möchte jetzt in einer anderen Tabelle per BeforePost antriggern, dass in der neuen Tabelle ein Datensatz angelegt wird. Funktioniert auch soweit alles. Nur irgendwie bekomme ich es nicht hin, dass die Variable für den Eintrag richtig übergeben wird.
Der Code sieht folgendermaßen aus:
sMK := E_LFKNR.Field.Value;
MySQL := frmdata.universal;
MySQL.Close();
MySQL.SQL.Text := 'insert into BLFK (ID, "Maskenkey") Values (NULL, :sMK)';
MySQL.Open();
MySQL.Close();
Wenn das ganze jetzt ausgeführt wird, legt er mir einen DS in der Tabelle BLFK an, füllt alle Felder brav aus, nur der Maskenkey(in den der Wert der Variable sMK eingetragen werden soll) bleibt leer.
Also an der Variablenfüllung kanns eigentlich nicht liegen. Wenn ich mir den Wert in einer MSGBOX ausgeben lasse stimmt der Wert immer. An der Insert-Anweisung kann es eigentlich auch nicht hängen.
Wenn ich die Variable durch einen Wert ersteze z.B. so:
MySQL.SQL.Text := 'insert into BLFK (ID, "Maskenkey") Values (NULL, 182)';
dann wird alles korrekt ausgeführt und es steht 182 im Maskenkey mit drin.
Ich hab das ganze schon mit String zusammenbauen, konvertieren in die verschiedensten Typen und was weiß ich nicht alles versucht. Aber ich kriegs einfach nicht hin.
Hat jemand irgendeine Idee??
Bin für jede Hilfe dankbar
Gruß
Vegeta
Da fallen mir mal spontan zwei Sachen ein:
* das Feld ist falsch definiert und nimmt keine Strings an, sondern nur Zahlen
* der Doppelpunkt bringt das ganze aus dem Tritt
Deswegen würde ich als erstes mal versuchen, bei der Parameterübergabe den Doppelpunkt wegzulassen und schauen was passiert.
Wenn's geht = Doppelpunkt Problemursache
wenn nicht = dann wohl der String
Bescheid
Michael
* das Feld ist falsch definiert und nimmt keine Strings an, sondern nur Zahlen
* der Doppelpunkt bringt das ganze aus dem Tritt
Deswegen würde ich als erstes mal versuchen, bei der Parameterübergabe den Doppelpunkt wegzulassen und schauen was passiert.
Wenn's geht = Doppelpunkt Problemursache
wenn nicht = dann wohl der String
Bescheid
Michael
-
- Site Admin
- Beiträge: 2673
- Registriert: Di Feb 10, 2004 5:48 am
- Wohnort: Bayreuth
Ganz so einfach geht das nicht
Hier hat man prinzipiell zwei Möglichkeiten.
1. Man baut sich den Insert-Befehl als String zusammen:
Hier wird der Wert aus dem String sMK aneinandergekettet.
2. Man übergibt den Wert als Parameter an das SQL (eleganter, vor allem, wenn man Integer- oder Float-Werte übergeben will):
Und nochmals: Das Wort Maskenkey darf nicht in Anführungsstrichen stehen! AvERP verwendet den SQL Dialekt 3, bei dem Felder einfach geschrieben werden. Generell: Wer Shift+2 drückt kann sich ziemlich sicher sein, dass er bei AvERP gerade einen Fehler macht
Hier hat man prinzipiell zwei Möglichkeiten.
1. Man baut sich den Insert-Befehl als String zusammen:
Code: Alles auswählen
MySQL.SQL.Text := 'insert into BLFK (ID, Maskenkey) Values (NULL, + ' sMK + ')';
2. Man übergibt den Wert als Parameter an das SQL (eleganter, vor allem, wenn man Integer- oder Float-Werte übergeben will):
Code: Alles auswählen
MySQL.SQL.Text := 'insert into BLFK (ID, Maskenkey) Values (NULL, :sMK)';
MySQL.ParamByName('sMK',sMK);
//erstes sMK ist der Name des Parameters im INSERT-Befehl, zweiter Wert ist der Name der Variable, die zugewiesen werden soll (hier nicht ganz so deutlich, da ja beide sMK heißen)
-
- Site Admin
- Beiträge: 2673
- Registriert: Di Feb 10, 2004 5:48 am
- Wohnort: Bayreuth
Interessehalber:
Das wandelt IB/FB automatisch um. Wenn das nicht möglich ist, wird eine Fehlermeldung ausgegebengast_miboe hat geschrieben:
* das Feld ist falsch definiert und nimmt keine Strings an, sondern nur Zahlen
Ohne Doppelpunkt wäre es kein Parameter, sondern ein Wert, nämlich die Zeichenfolge "sMK", allerdings ohne einfache Anführungsstriche. Wiederum würde IB/FB einen Fehler ausgeben.gast_miboe hat geschrieben: * der Doppelpunkt bringt das ganze aus dem Tritt
-
- Beiträge: 106
- Registriert: Di Nov 02, 2004 1:35 pm
Hallo Admin,
also erstmal vielen Dank für die schnelle Hilfe
Mit dem Zusatz MySQL.ParamByName('sMK',sMK); funktioniert das ganze einwandfrei
Was die "" angeht:
Also muss der Satz bei mir ungefähr so lauten:
"Wer Shift+2 hier nicht drückt, macht sich nur verrückt. Er kann sich ziemlich sicher sein, er macht grad einen Fehler rein"
Gruß
Vegeta
also erstmal vielen Dank für die schnelle Hilfe
Mit dem Zusatz MySQL.ParamByName('sMK',sMK); funktioniert das ganze einwandfrei
Was die "" angeht:
Also ich definiere die Felder in der DB ganz normal, ohne "". Wenn ich dann das Feld ID ansprechen will, geht das auch ohne "". Aber bei allen anderen Feldern muss ich beim Aufruf, in AvERP genauso wie in der DB, den Namen in "" setzen, sonst bekomme ich immer den Fehler Colum unknown. Keine Ahnung warum, vielleicht weil ich den EMS InterBase & FireBird Manager 3 benutze...Und nochmals: Das Wort Maskenkey darf nicht in Anführungsstrichen stehen! AvERP verwendet den SQL Dialekt 3, bei dem Felder einfach geschrieben werden. Generell: Wer Shift+2 drückt kann sich ziemlich sicher sein, dass er bei AvERP gerade einen Fehler macht
Also muss der Satz bei mir ungefähr so lauten:
"Wer Shift+2 hier nicht drückt, macht sich nur verrückt. Er kann sich ziemlich sicher sein, er macht grad einen Fehler rein"
Gruß
Vegeta
-
- Beiträge: 106
- Registriert: Di Nov 02, 2004 1:35 pm
Hallo Admin,
ja, sollte ich wohl mal umstellen
Hätte da aber noch eine ähnliche Frage:
Habe mal versucht folgende SQL-Abfrage auf die selbe Weise zu erstellen:
Das ganze sollte ja die Anzahl der Datensätze mit Bestimmtem Maskenkey zurück geben. Läuft auch zumindest mal ohne Fehler durch. Gibt es jetzt hier eine Möglichkeit auf die Rückgabe der SQL-Anweisung zu zugreifen??
Wenn ja, wie sieht die aus??
Gruß
Vegeta
ja, sollte ich wohl mal umstellen
Hätte da aber noch eine ähnliche Frage:
Habe mal versucht folgende SQL-Abfrage auf die selbe Weise zu erstellen:
Code: Alles auswählen
MySQL := frmdata.universal;
MySQL.Close();
MySQL.SQL.Text := 'select count(*) from BLFK WHERE "Maskenkey" = :iMV';
MySQL.ParamByName('iMV',iMV);
MySQL.Open();
MySQL.Close();
Wenn ja, wie sieht die aus??
Gruß
Vegeta
-
- Site Admin
- Beiträge: 2673
- Registriert: Di Feb 10, 2004 5:48 am
- Wohnort: Bayreuth
Das Kind braucht einen Namen, und hier muss man, ironischer Weise, Anführungszeichen setzen:
Code: Alles auswählen
MySQL.SQL.Text := 'select count(*) AS "ZAEHLER" from BLFK WHERE "Maskenkey" = :iMV';
MySQL.ParamByName('iMV',iMV);
MySQL.Open();
iZaehler := 0;
iZaehler := AsInteger(MySQL.FieldByName('Zaehler'));
MySQL.Close();