È perché il tuo
VALUES (%s,%s)
non circonda il contenuto della variabile namee e family tra virgolette. Pertanto, il tuo motore Sql di back-end pensa al tuo mohsen
è un nome di colonna, non un valore.
Invece, usa, ad es.
VALUES (''%s'',''%s'')
come in
Namee := 'mohsen';
Family := 'dolatshah';
aSQLText:= 'INSERT INTO b_tbl(Name,Family) VALUES (''%s'',''%s'')';
aSQLCommand := Format(aSQLText,[namee,family]);
Nella versione originale della mia risposta, ho spiegato come risolvere il tuo problema "raddoppiando" le virgolette singole nell'Sql che stavi cercando di costruire, perché mi sembrava che avessi difficoltà a vedere (letteralmente) cosa c'era che non andava in cosa stavi facendo.
Un modo alternativo (e migliore) per evitare il tuo problema (e quello che uso sempre nella vita reale) è usare QuotedStr()
funzione. Lo stesso codice diventerebbe quindi
aSQLText := 'INSERT INTO b_tbl (Name, Family) VALUES (%s, %s)';
aSQLCommand := Format(aSQLText, [QuotedStr(namee), QuotedStr(family)]);
Secondo la Guida in linea:
Ciò che significa "ripetuto" è ciò che ho chiamato "raddoppio". Perché è importante e il motivo principale per cui uso QuotedStr è evitare che il motore db SQL dia un errore quando il valore che vuoi inviare contiene un singolo carattere di virgolette come in O'Reilly .
Prova ad aggiungere una riga contenente quel nome alla tua tabella usando MySql Workbench e vedrai cosa intendo.
Quindi, l'utilizzo di QuotedStr non solo rende la costruzione di istruzioni SQL come stringhe nel codice Delphi meno soggetta a errori, ma evita anche problemi nel back-end.