Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Anführungszeichen beim INSERT INTO in eine FoxPro dbf-Datei

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
31.05.2006, 10:30 Uhr
Quenten



Mal wieder ich. Hoffe einer von euch kann mir weiterhelfen.

Folgende Situation:
Ich möchte ein INSERT INTO Statement (die Datein dafür lese ich mir zuvor aus einer SQL-Server-Datenbank) auf eine VoxPro dbf-Datei absetzen. Dabei werden Werte für Zeichen-Felder (Datentyp) mit Anführungszeichen umschlossen und z.B. Dezimal-Felder ohne Anführungszeichen. Das sieht dann ungefähr so aus (Zusammensetzung des INSERT INTO Statements):


Code:
l_statement = "INSERT INTO" + kd_table + " (kd_zeichen, kd_name, kd_zahl) ";
l_statement += "VALUES (";
l_statement += "\"" + l_kunden_zeichen + "\",";
l_statement += "\"" + l_kunden_name + "\",";
l_statement += l_kunden_anzahl + ")";



Das abzusetzende Statement lautet dann also:

Code:
INSERT INTO kunden_tabelle (kd_zeichen, kd_name, kd_zahl) VALUES ("AFG","Thomsen AG",23);



Soweit so gut.
Problem entsteht nur, wenn bei einem der Werte Anführungszeichen vorhanden sind. Wenn der Kunde also nicht Thomsen AG sondern Th"omsen AG heißen würde. Dann wird das Anführungszeichen nämlich als Beenden des Tags angesehen und schon hab ich nen Problem.

Wie kann ich das umgehen?
Mit Perl hab ich es damals irgendwie gelöst, indem ich die Variablen erst beim direkten Datenbankzugriff eingefügt habe, meine ich. Aber bei C++!??!

Absetzen tu ich das Statement mittels:

Code:
datasession.OpenWithServiceComponents("MSDASQL.1", &dbinit);
session.Open(datasession);
...
HRESULT tmp = rs.Open(session, l_statement, &propset, NULL, DBGUID_DBSQL, FALSE);
rs.Close();
session.Close();
datasession.Close();



Einer nen Lösungsansatz parat?

Dieser Post wurde am 31.05.2006 um 10:30 Uhr von Quenten editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.05.2006, 13:23 Uhr
xXx
Devil


als was ist l_statement declariert...

"INSERT INTO" + kd_table + " (kd_zeichen, kd_name, kd_zahl) ";
das wird der dir nicht abnehemen... du hast nach into ein leerzeichen vergessen.

usw usf
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
31.05.2006, 15:15 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


bau dir eine funktion die deine einträge umwandelt:

also \' in \\\' und \" in \\\" (also ' in \' und " in \")

also die zeichenketten der felder "escapen"
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.06.2006, 08:18 Uhr
Quenten



@xXx: Ja, gut, aber das ist nicht meine Frage gewesen.

@FloSoft: Escapen ... sollte ich auf jeden Fall noch mal ausprobieren. thx
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.06.2006, 18:13 Uhr
Quenten



Hab es jetzt vorerst so gelöst, dass ich erstens die String-Werte für Zeichenfelder in Hochkomma übergebe, aus FoxPro heraus gehts nicht, aber aus meinem Prog heraus schon ... komisch, und zweitens alle Hochkomma in den Werten werden durch doppelte Hochkomma ersetzt. Sozusagen nen Escape ohne Standard-Backslash. Funzt jedenfalls.

Danke euch allen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: