-
anfänger! Feld in DataBase aktualisieren
Hallo zusammen,
nachdem mir hier beim ConnectionString schon toll geholfen wurde, habe ich hier ein andres Problem.
Ändern einer Spalte/Zelle in einer DB
mein code sieht in etwa so aus
Code:
procedure updateField;
var
aDataSet : TAdoDataSet;
begin
aDataSet := TAdoDataSet.Create(nil);
aDataSet.ConnectionString := 'Provider=MSDASQL;User Id=user;Password=passwort;Data Source=rhdbd_16;Driver=iSeries Access ODBC Driver;Initial Catalog=VWWE400;Mode=ReadWrite;'
aDataSet.CommandText := 'update rhdbd_16.WAKO set WAAUMG ='+quotedStr(edtBadParts.Text)
+' where WAFIRM='+quotedStr(firm)
+' and WAWKNR='+quotedStr(edtWerkNummer.Text)
+' and WAAUNR='+quotedStr(edtAuftragsNummer.Text)
+' and WAAUPO='+quotedStr(edtIndex.Text);
aDataSet.Active := True;
aDataSet.close;
aDataSet.free;
end;
So wie es hier steht stürzt das Programm AB! (zugriffsverletzung in 'cwbodbc.dll')
wenn ich den connection string mit mode= read benutze um aus der Datenbank zu lesen funtioniert das prima mit dem Kommando
Code:
aDataSet.CommandText := 'select WAAUMG from rhdbd_16.WAKO'
+' where WAFIRM='+quotedStr(firm)
+' and WAWKNR='+quotedStr(edtWerkNummer.Text)
+' and WAAUNR='+quotedStr(edtAuftragsNummer.Text)
+' and WAAUPO='+quotedStr(edtIndex.Text);
Bin ich überhaupt auf dem richtigen weg?
Ich hoffe mal das ist wieder nur ein Anfängerfehler und mir wird hier geholfen
Grüße
Stefan
-
Hi,
hast du schon probiert die Verbindung über ein DSN zu steuern?
Ich bin mir auch nicht sicher ob der Connectionstring korrekt ist. Ob du einen Prover + Driver gemeinsam verwenden kannst.
Mit folgenden String hatte ich nie Probleme:
Code:
ConnODBC = new OdbcConnection("Driver={Client Access ODBC Driver (32-bit)}" +
"; System = " + vLogIn.System +
"; UID = " + vLogIn.User +
"; PWD = " + vLogIn.Password +
"; DBQ = " + vLogIn.Library +
"; CATALOGOPTIONS=1; CMT=0");
Keine ahnung in welcher Sprache du entwickelst, du solltest jedoch ein eigenes Connection-Objekt erstellen, wenn das möglich ist.
Die Fehlermeldung sehr seltsam aus. Hast du die Möglichkeit mittels Exeptions eine "genauere" Fehlerbeschreibung zu erhalten?
Vielleicht so ähnlich wie:
Code:
try
{
vConnODBC.Open();
MessageBox.Show("Verbindung hergestellt", "Connection");
return 0; // OK
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return -1; // Fehler
}
-
Sieht mir stark nach Brain aus .
In der Verbindung muss auf jeden Fall cmt=0 rein, da nicht journalisiert wird.
Den Mode kann man weglassen, ReadWrite ist default.
Für Commands sollte man am Besten mit Parameter-Markern arbeiten, aber als String gehts auch.
Zu beachten ist, dass lediglich Zeichenfelder in Hochkomma gesetzt werden dürfen, numerische Werte werden ohne Hochkomma übergeben.
Hier ist jedoch auf das Dezimalzeichen (Default in Deutsch Komma) zu achten.
Da das Komma aber auch zur SQL-Syntax gehört, ist vor und hinter einem numerischen Wert ein Leerzeichen erforderlich.
-
Danke für die schnelle Antwort!
Den ConnectionString habe ich geändert!
(einfach den Provider=MSDASQL rausgeschmissen) funktioniert genauso.
Wenn ich die Abfrage/Änderung "anders" mache
ertwa so
Code:
aDataSet := TAdoDataSet.Create(nil);
aDataSet.ConnectionString :=User Id=user;Password=passwort;Data Source=rhdbd_16;Driver=iSeries Access ODBC Driver;Initial Catalog=VWWE400;Mode=ReadWrite;';
// query zusammenbasten
aDataSet.CommandText := 'select WAAUMG from rhdbd_16.WAKO'
+' where WAFIRM='+quotedStr(firm)
+' and WAWKNR='+quotedStr(edtWerkNummer.Text)
+' and WAAUNR='+quotedStr(edtAuftragsNummer.Text)
+' and WAAUPO='+quotedStr(edtIndex.Text);
// ausführen
try
aDataSet.Active := True;
except
ShowMessage('Can´t open dataset!');
end;
// datenQuelle Editieren einschalten
aDataSet.Edit;
recCount := aDataSet.RecordCount;
if recCount >0 then
begin
// zu ändernden wert setzen
aDataSet.FieldByName('WAAUMG').Value := edtBadParts.Text;
end;
// änderungen posten
try
aDataSet.Post
except
ShowMessage('Write not exception!');
end;
// aufräumen usw......
Wenn ich es so mache bekomme ich ein richtige Exeption und nicht "nur" eine zugriffsverletzung.
Die heißt:
Code:
EOleExeption: Meldung: '[IBM][iSeries Access ODBC-Treiber][DB2 UDB]SQL7967 - PREPARE für Anweisung WAKO beendet'. Prozess wurde angehalten ....
Vielleicht kann irgendjemand mit dieser Fehlermeldung mehr anfangen.
Gruß
Stefan
-
Vielleicht ist es auch so wie Baldur sagte, dass du Strings in ein Integer-Feld zu speichern versuchst?
Code:
// query zusammenbasten
aDataSet.CommandText := 'select WAAUMG from rhdbd_16.WAKO'
+' where WAFIRM='+quotedStr(firm) <--- Wirklich Text??
+' and WAWKNR='+quotedStr(edtWerkNummer.Text) <--- Wirklich Text??
+' and WAAUNR='+quotedStr(edtAuftragsNummer.Text) <--- Wirklich Text??
+' and WAAUPO='+quotedStr(edtIndex.Text);
Ansonsten würde ich den Update-String testhalber Hard-Coded hinterlegen. Wenn es dann funktioniert liegt der Fehler beim zusammenstellen des Strings.
Oder du versuchst den String, der nach dem Zusammenbasteln erzeugt wurde 1:1 im STRSQL auszuführen.
Dort sollte zumindest die gleiche Fehlermeldung kommen, und mit F1 erhälst du dann auch mehr Informationen.
-
"Prozess wurde angehalten" ist schon seltsam. Die Meldung kenne ich nicht. SQL7967 ist nur eine Fertigmeldung und dürfte keine Ausnahme auslösen.
Allerdings kenne ich auch Tado nicht.
In ADO gibt es eine Supports-Eigenschaft, in der man prüfen kann, ob überhaupt ein Update erlaubt ist.
Natürlich ist der Feldtyp wichtig.
WAAUNR und WAAUPO sind z.B. numerisch!
-
Habe die numerischen Felder numerisch gemacht oder zumindest nicht mehr in Hochkomma "gepackt". Keine Änderung!
Wenn die SQL - Select Abfragen funktionieren, ohne auf den Datentyp zu achten, kann es dann trotzdem sein, dass das beim setzen nicht funktioniert?
Habe mal die Ganzen Supports ausgeben lassen (die sind vom typ cursorOptions)!
hier das ergebnis
Code:
HoldRecords supported
MovePrevious supported
AddNew supported
Delete supported
Update supported
Bookmark supported
ApproxPosition supported
UpdateBatch supported
Resync supported
Notify supported
Find supported
hm, update wird supported!
muss der cursor irgendiwe eingestellt werden?
was ist denn in der Regel vorzuziehen
Code:
Ändern des Wertes eines Feldes das mit Select ermittelt wurde und dann update mit table.Post
ODER
Code:
eine SQL Abfrage wie
UPDATE table SET feld=3 WHERE bedingung;
BTW: funktioniert bei mir beides nicht, im Moment
Gruß Stefan
Und was ganz andres: liegt die Schmalheit des Antwort Editierfensters am Browser? (ich habe hier Firefox 3.5)oder ist das einstellbar?
-
Ohne dir nahetreten zu wollen, aber die Maschine VWWE400 kenne ich ganz gut.
Ich denke, hier ist der Zugriffsschutz PCSACC/400 aktiv so dass du nicht updaten darfst!
PS:
Der User RHPCPGM darf das nicht so einfach.
-
Ok, wie gesagt ich bin blutiger Anfänger!
Dann werde ich mir jetzt erst mal einen User mit ausreichenden Rechten zum updaten beschaffen.
Danke erstmal.
Gruß
Stefan
-
Update WAKO
Hallo Stefan,
also die Felder WAFIRM und WAWKNR sind Alpha.
WAAUNR und WAAUPO sind Num (wie Baldur gesagt hat)
Das Feld WAAUMG ist num (Ist ja die Auftragsmenge)
Aber kann es sein, dass du einen Update über ODBC nur auf eine Indexierte Datei machen kannst?
Dann müßte die WAKO01 deine Datei sein. In XPPS gibt es eine ganze Menge logischer Dateien.
Aber noch ein Hinweis, die Menge nur im Auftragskopf ändern bringt evtl. nicht viel. Du must auch die OFMA berücksichtigen.
Klaus
-
Auf dem obigen System ist das Sicherheitstool PCSACC/400 aktiv.
Es darf ja nun mal nicht jeder irgendwelche Daten ändern (ausser mir).
-
Hallo.
Der Quellcode sieht nach Delphi aus.
Lass bei den numerischen Feldern die "quotedstr" weg.
Gruß Joe
Similar Threads
-
By Hubert in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 26-08-07, 09:10
-
By RaMai in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 28-11-06, 07:59
-
By Burgy Zapp in forum NEWSboard Server Software
Antworten: 0
Letzter Beitrag: 29-06-06, 17:19
-
By M Scheid in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 12-06-06, 13:02
-
By jogisarge in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 10-05-06, 16:26
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks