Newsgroup: it.comp.programmare.win32
Titolo: insert su db Sql Server

utilizzando ADO e VC6, per inserire una tupla nel db costruisco una
CString contenente la query sql:
(es. insert into table values(field='questa insert funziona') )
Se però nella CString il testo del messaggio contiene un apostrofo:
(es. insert into table values(field='l'insert non funziona!') )
Mi fallisce l'insert perchè l'apice della CString viene interpretato
come chiusura dell'item dello statement sql!!!
Come faccio a risolvere questo problema?
Non so proprio che fare!
Grazie mille
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Grazie mille
Ad ogni apice aggiungi un apice. 
es
insert into table values ('oggi e'' una bella giornata')
Ciao
Stefano "HappyMan" (Lago Maggiore - NO)
--
http://www.sgr.info
Email happyman69 (at) 
libero.it


In alternativa a quanto proposto da "Stefano HappyMan" (che e' sicuramente
il metodo piu' semplice e veloce) c'e' l'uso dei command, con i quali
imposti un template di query. Nel tuo caso diventa:
insert into table values(field=?)
poi con i metodi appositi si assegnano i parameters (indicati nella query
con ?). A questo punto e' compito di ADO sistemare la query, raddoppio delgi
apici incluso.
L'uso dei command e' conveniente se la query di insert va eseguita molte
volte, per cui la compili una sola volta e la fai eseguire molte volte
cmabiando i parametri.
Ciao. Federico.

 raddoppio delgi apici incluso.
#include "stdafx.h"
#include <iostream>
#include <string>
#pragma warning(disable: 4146)  // Q231931
#pragma warning(disable: 4192)
#import "E:\Programmi\File Comuni\System\ADO\msado15.dll" no_namespace
     rename("EOF", "EndOfFile")
#import "E:\Programmi\File Comuni\System\ole db\oledb32.dll"
     rename_namespace("msdasc")
#pragma warning(default: 4146)
#pragma warning(default: 4192)
int _tmain(int argc, _TCHAR* argv[])
{
 if (FAILED(::CoInitialize(NULL))) {
  return -1;
 }
 try {
  _ConnectionPtr conn;
  conn.CreateInstance(__uuidof(Connection));
  conn->Open(TEXT("Provider=Microsoft.JET.OLEDB.4.0;Data source =
C:\\prova.mdb"),
   TEXT(""), TEXT(""), -1);
  _CommandPtr command;
  command.CreateInstance(__uuidof(Command));
  command->ActiveConnection = conn;
  command->CommandText = TEXT("SELECT Tabella1.Campo1, Tabella2.Campo1 ")
        TEXT("FROM Tabella2 INNER JOIN Tabella1 ON Tabella2.Campo2 = ")
        TEXT("Tabella2.Campo2 WHERE Tabella2.Campo1 LIKE ? ")
        TEXT("AND Tabella1.Campo3 = ?;");
// Dove
// Tabella1.Campo1 e Tabella2.Campo2 sono di tipo testo
// e i rimanenti sono campi numerici o contatori
  _RecordsetPtr rs;
  rs.CreateInstance(__uuidof(Recordset));
  _variant_t params[2];
  params[0] = TEXT("Jerle Shannara");
  params[1] = 1L;
  rs = command->Execute(NULL, params, adCmdText);
  if (!rs->GetBOF()) {
   _bstr_t res = rs->GetFields()->GetItem(TEXT("Campo1"))->GetValue();
   std::string stringa(res);
   std::cout << stringa.c_str() << std::endl;
  }
 }
 catch (_com_error &e) {
  _bstr_t bstrSource(e.Source());
  _bstr_t bstrDescription(e.Description());
  // Print Com errors.
  printf("Error\n");
  printf("\tCode = %08lx\n", e.Error());
  printf("\tCode meaning = %s\n", e.ErrorMessage());
  printf("\tSource = %s\n", (LPCSTR) bstrSource);
  printf("\tDescription = %s\n", (LPCSTR) bstrDescription);
 }
 ::CoUninitialize();
 return 0;
}
L'errore che mi viene restituito č che manca un parametro necessario
--
  Jerle Shannara
Per rispondere in email sostituisci JERLEANTISPAM con inwind
homepage 
http://utenti.lycos.it/jerleshannara

 raddoppio delgi apici incluso.
Ma questo metodo funziona anche con piů di un parametro? Ho provato a
scrivere un piccolo programma di prova, ma non funziona. Il programma č il
seguente:
#include "stdafx.h"
#include <iostream>
#include <string>
#pragma warning(disable: 4146)  // Q231931
#pragma warning(disable: 4192)
#import "E:\Programmi\File Comuni\System\ADO\msado15.dll" no_namespace
     rename("EOF", "EndOfFile")
#import "E:\Programmi\File Comuni\System\ole db\oledb32.dll"
     rename_namespace("msdasc")
#pragma warning(default: 4146)
#pragma warning(default: 4192)
int _tmain(int argc, _TCHAR* argv[])
{
 if (FAILED(::CoInitialize(NULL))) {
  return -1;
 }
 try {
  _ConnectionPtr conn;
  conn.CreateInstance(__uuidof(Connection));
  conn->Open(TEXT("Provider=Microsoft.JET.OLEDB.4.0;")
   TEXT("Data source =C:\\prova.mdb"), TEXT(""), TEXT(""), -1);
