Mysql
 sql >> Base de données >  >> RDS >> Mysql

Colonne inconnue dans la liste des champs

C'est parce que votre

VALUES (%s,%s)

n'entoure pas le contenu des variables namee et family de guillemets. Par conséquent, votre moteur Sql principal pense que votre mohsen est un nom de colonne, pas une valeur.

Utilisez plutôt, par exemple

VALUES (''%s'',''%s'')

comme dans

  Namee := 'mohsen';
  Family := 'dolatshah';
  aSQLText:= 'INSERT INTO b_tbl(Name,Family) VALUES (''%s'',''%s'')';
  aSQLCommand := Format(aSQLText,[namee,family]);

Dans la version originale de ma réponse, j'ai expliqué comment résoudre votre problème en "doublant" les guillemets simples dans le Sql que vous essayiez de construire, car il me semblait que vous aviez du mal à voir (littéralement) ce qui n'allait pas avec quoi tu faisais.

Une autre (et meilleure) façon d'éviter votre problème (et celle que j'utilise toujours dans la vraie vie) est d'utiliser le QuotedStr() une fonction. Le même code deviendrait alors

aSQLText := 'INSERT INTO b_tbl (Name, Family) VALUES (%s, %s)'; 
aSQLCommand := Format(aSQLText, [QuotedStr(namee), QuotedStr(family)]);

Selon l'aide en ligne :

Ce que cela signifie par "répété" est ce que j'ai appelé "doubler". Pourquoi c'est important, et la principale raison pour laquelle j'utilise QuotedStr est d'éviter que le moteur de base de données Sql ne génère une erreur lorsque la valeur que vous souhaitez envoyer contient un guillemet simple comme dans O'Reilly .

Essayez d'ajouter une ligne contenant ce nom à votre table en utilisant MySql Workbench et vous verrez ce que je veux dire.

Ainsi, non seulement l'utilisation de QuotedStr rend la construction d'instructions SQL sous forme de chaînes dans le code Delphi moins sujette aux erreurs, mais elle évite également les problèmes au niveau du back-end.