2008-12-18 11 views
0

J'ai construit une base de données dans MS Access. Là, j'ai une table appelée Customers qui a aussi une cellule appelée Employee type: integer. J'ai également construit un programme en C++ qui contrôle toutes les données.C++ sql passer un entier à la chaîne sql

Disons que j'ai une chaîne comme ceci:

string sqlString = "SELECT * FROM Customers Where Customers.Employee = '" + id + "' "; 

Id passe par ma fonction correctement et est un entier, donc j'obtiens une erreur dans la compilation en disant: « plus de pointeur non valide ».

Si je déclare l'id comme une chaîne bien sûr, il n'y a pas d'erreur mais il n'y a pas de résultats dans mon formulaire aussi. Si je déclare dans l'employé de la cellule de base de données sous forme de texte et de construire ma requête comme ceci:

string sqlString = "SELECT * FROM Customers WHERE Customers.Employee = 128"; 

j'obtenir des résultats, mais je dois l'employé comme un entier cause de son une clé étrangère d'une autre table.

Alors, que dois-je faire avec ma requête pour avoir des résultats en passant un nombre entier en paramètre à travers l'ID de la variable, pour être ok avec la cellule Employé de la base de données qui est aussi entier? Des idées? J'apprécierais vraiment de l'aide ici. Comme je l'ai dit, si je convertis id en chaîne, il n'y a pas de résultats dans mon formulaire puisque Employee dans la base de données est un nombre entier. Donc ceci:

std::ostringstream buf; 
buf << "SELECT * FROM Customers Where Customers.Employee = '" << id << "' "; 
string str = buf.str(); 

ne fera pas le travail ou toute autre conversion.

Comment puis-je transmettre id en tant qu'entier dans ma requête?

Répondre

3

Vous pouvez utiliser sprintf, mais en C++, vous pouvez faire:

std::ostringstream buf; 
buf << "SELECT * FROM Customers Where Customers.Employee = '" << id << "' "; 
string str = buf.str(); 

(non testé)

+0

Stirngstream est le meilleur moyen d'aller. La plupart des requêtes sont écrites avec sqlstream. –

0

vous pouvez utiliser boost :: format avec boost :: str

string = boost::str(boost::format("This is a string with some %s and %d numbers") %"strings" %42); 

Cela devrait être une meilleure approche puisque vous aurez toute la variable de remplacement dans un endroit à la fin.

1

utilisation

std::ostringstream buf; buf << "SELECT * FROM Customers Where Customers.Employee = " << id ; string str = buf.str(); 

Cela devrait fonctionner s'il vous plaît essayer « 12 » --- citation ne doit pas être placé avant et après 12

Questions connexes