Hallo,
ich habe folgendes Problem. Ich will mit VC6 einen Wert aus einer SQL
Datenbank auslesen.
Der SQL String funktioniert wie angegeben wenn ich Ihn im SQL
EnterpriseMangager laufen lasse.
Die Verbindung zur Datenbank scheint auch zu funktionieren, jedenfalls ist
meine test1 Variable=1.
In der Zeile: pRs->Open(rsString, &pCon, adOpenForwardOnly, adLockReadOnly,
adCmdUnknown);
springt er mir jedoch in meine definierte Catchfunktion mit: Code=800s0bb9
Msg: Unknown error 0x800A0BB9 Source: ADODB.Recordset Description: Arguments
are of the wrong type, are out of acceptable range, or are in conflict with
one another.
Hilfe!!!
Anbei der Code:
[code]
void CAdoTestDlg::OnGetProductType()
{
char *ProductType;
char *SeriaNumber;
try
{
_ConnectionPtr pCon = NULL;
_RecordsetPtr pRs = NULL;
FieldPtr pfldFirstName, pfldLastName, pfldAge;
_variant_t vFirstName, vLastName, vAge;
_bstr_t bsEmpty = L"";
// Create and set pCon structure
pCon.CreateInstance(__uuidof(Connection));
pCon->Provider = "SQLOLEDB";
pCon->CommandTimeout = 3;
// Define and set connection string
_bstr_t cnnString = "DATA SOURCE='Server1';USER ID='xxx';PASSWORD='xxx';";
pCon->ConnectionString = cnnString;
pCon->CursorLocation = adUseClient;
pCon->ConnectionTimeout = 1;
pCon->Open(bsEmpty, bsEmpty, bsEmpty, adConnectUnspecified);
long test1=0;
test1 = pCon->State; //test1=1 O.K.
// Create and set pRs structure
pRs.CreateInstance(__uuidof(Recordset));
pRs->PutRefActiveConnection( pCon );
// Open the record set and retrieve the data
_bstr_t rsString = "SELECT datum,identnummer,etext FROM protokoll WHERE
identnummer = '14090984' order by datum desc";
pRs->Open(rsString, &pCon, adOpenForwardOnly, adLockReadOnly,
adCmdUnknown); //hier springt er in die Catchfunktion
int rstFound = pRs->RecordCount;
// Close connections
pRs->Close();
pCon->Close();
}
catch( _com_error &e )
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
CString str;
str.Format("\tCode = %08lx", e.Error());
str += " Msg: "; str += e.ErrorMessage();
str += " Source: "; str += bstrSource;
str += " Description: "; str += bstrDescription;
AfxMessageBox(str);
}
[/code]
Grüße Marcus
Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge
Der Fehler wird wahrscheinlich im WHERE-Abschnitt liegen.
identnummer = '14090984'
Ist identnummer vom Typ Text? Wenn nicht, darfst Du um 14090984 keine Hochkommata schreiben.
Noch ein Tipp am Rande:
Das ADODB-Control taugt nichts. Drücke es in die Tonne und mache Deine Connections und Abfragen von Hand. Ist schneller, vom Code her kleiner und fehlerresistenter.
Hallo,
danke für die schnelle Antwort.
identnummer ist in der SQL Datenbank vom Typ int. Paßt dass dann so mit Hochkomma?
mfg
Marcus
Nein.
Int ist ein Datentyp für Zahlen. Damit darfst Du bei diesem Feld keine Hochkommata verwenden.
... WHERE (identnummer = 14090984) ...
Hallo,
hab ich so gemacht, leider kommt die gleiche Fehlermeldung.?
Jemand hat folgendes gemeint:IIRC erzeugst du so ein Variant vom Typ VT_UNKNOWN, die Open-Methode möchte
aber einen Variant vom Typ VT_DISPATCH haben. Füg ein Cast ein, der pCon in einen IDispatch* umwandelt.
Leider keine Ahnung wie oder was er meint!
Kannst du mir weiterhelfen?
Nein, ich bin eher in VB zu Hause, von VC habe ich keine Ahnung.