Zum Inhalt springen

VC++ zugriff auf DB2 über ODBC V7


Thias78

Empfohlene Beiträge

Hallo!!

Ich hab eben ein kleines Windowsprogramm geschrieben... es ist eigentlich alles wunderbar und funktioniert auch...

bis auf:

ICH KANN EINEM FELD DER DATENBANK KEINE NEUEN WERTE ZUWEISEN!!!

*heul*

ich wähle einen wert aus... sag ihm, dass ich den eintrag gerne editieren möchte und dann kommt die zuweisung... hier kommt eine fehlermeldung... schalte ich die zuweisung für testzwecke aus, so führt er das programm inkl. update und tabelle schließen bis zum ende aus...

aber der lässt mich ums verrecken die zuweisung nicht ausführen... und ja... ich habe darauf geachtet, dass es der selbe datentyp ist...

liegt das am DB2 ODBC treiber in der version 7?? lässt der keine änderungen zu??

mach ich sonst was falsch??

wie könnt ich das trotzdem hinbekommen???

HILFE!!!

DANKE!!!!!!!

*wink*

Thias

Link zu diesem Kommentar
Auf anderen Seiten teilen

...

Nachtrag!!

...

Die Fehlermeldung lautet:

CLI0150E Der Treiber unterstützt die Operation nicht. SQLSTATE=S1C00

... ich befürchte ja das schlimmste, und zwar, dass der ODBC treiber das einfach nicht kann... ABER DER HAT DAS ZU KÖNNEN... ist doch schließlich version 7.01.irgendwas...

falls ich recht hab... wie könnte ich in C++ windows-programmierung (Dialogfenster) das sonst noch lösen, dass ich evtl direkt auf die DB2 DB zugreif??

*wink*

Thias

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo nochmal!!!

wie bereits mein letzter eintrag hier, so hab ich nach wie vor das problem nicht gelöst...

kurz zur erinnerung...

ich schreibe ein dialog-programm in MS V C++

ich mache über ODBC eine abfrage nach einem eindeutigen datensatz

ich öffne den recordset

ich sag, dass ich den recordset gern mit EDIT() verändern möchte

ich mach einem feld der tabelle eine zuweisung (löst den fehler aus)

/*

fehlermeldung:

CLI0150E Der Treiber unterstützt die Operation nicht. SQLSTATE=S1C00

*/

ich würde (!!!) mit einem UPDATE() die geänderten werte zurückschreiben

ich würde (!!!) den RS wieder schließen...

...

auf der IBM-seite hab ich jetzt nach stundenlanger suche was gefunden:

ZITAT: (http://www-1.ibm.com/support/docview.wss?uid=swg1PQ36209)

If this error occurs in an ODBC application, or the ODBC

application trace is examined, the symptom is SQLGetData()

returning SQL_ERROR due to SQLSTATE S1C00.

The symptom can be intermittent. The cause of the symptom is an

uninitialized field in an ODBC control block that is built when

processing result sets from stored procedures.

ZITAT ENDE

...

und was sagt uns jetzt diese beschreibung??

diese beschreibung ist für DB2 V6 ... wir haben aber 7.irgendwas

es ist dann auch noch eine beschreibung für version 5... die haben wir aber auch nicht... für version 7 find ich nix passendes!!

irgendwelche ratschläge??

oder wenigstens trost!?!

danke

:confused:

Thias

Link zu diesem Kommentar
Auf anderen Seiten teilen

also beim automatischen einfügen durch SDI

hat das zu ersetzende feld den typ CString... genauso wie auch der zuzuweisende wert CString ist... auch die länge stimmt exact überein

...

die zuweisung sieht so aus:

tbl.m_strFilter = _T("[FELD1] = '");

tbl.m_strFilter += var1;

tbl.m_strFilter += _T("' AND ");

tbl.m_strFilter += _T("[FELD2] = '");

tbl.m_strFilter += var2;

tbl.m_strFilter += _T("'");

tbl.Open();

if(tbl.IsBOF())

{

AfxMessageBox("Keine entsprechenden Daten vorhanden!");

tbl.Close();

}

tbl.Edit();

//in der nächsten zeile bricht er ab und bringt folgende fehlermeldung:

//CLI0150E Der Treiber unterstützt die Operation nicht.

//SQLSTATE=S1C00

tbl.FELD3 = var3;

tbl.Update();

tbl.Close();

AfxMessageBox("Daten wurden aktualisiert!");

...

in meinem anderen projekt geht das aber so... allerdings mit MySQL über ODBC V 3.5

...

der DB zugriff erfolgt automatisch durch SDI... wie könnt ich das manuell machen, dass ich ohne ODBC direkt auf die entsprechende DB zugreif?

ich weiß langsam nicht mehr weiter!!

*wink*

Thias

Link zu diesem Kommentar
Auf anderen Seiten teilen

:marine

mich hats gefindet!!! (O:

hallo leutz!!

und danke nochmal!!!!!

ich habs gestern gefunden...

hier die lösung:

DB2 mag anscheinend die zuweisung über Recordsets nicht!!!

Mein Problem war allerdings, dass ich mir das selbst lernen musste und mir dafür ein anscheinend nicht sonderlich geeignetes Buch hierfür zur Verfügung stand/steht... in diesem Buch war nicht erklährt oder auch nur erwähnt, dass Zugriffe auch über "ExecuteSQL()" erfolgen können... da bin ich erst gestern dahinter gestiegen, wie das über diesen Befehl funzt...

denn die Beschreibungin der C++ Onlinehilfe lässt, wie ich finde, auch etwas zu wünschen übrig!!!

naja... wie auch immer.... jetzt funzt es... und ich darf mein ganzes projekt umschreiben... dürfte 4 oder 5 tage arbeit bedeuten... (O:

danke nochmal fürs helfen!!!

*wink*

Thias

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...