Es porque tu
VALUES (%s,%s)
no rodea el contenido de la variable namee y family entre comillas. Por lo tanto, su motor Sql de back-end piensa que su mohsen
es un nombre de columna, no un valor.
En su lugar, utilice, por ejemplo,
VALUES (''%s'',''%s'')
como en
Namee := 'mohsen';
Family := 'dolatshah';
aSQLText:= 'INSERT INTO b_tbl(Name,Family) VALUES (''%s'',''%s'')';
aSQLCommand := Format(aSQLText,[namee,family]);
En la versión original de mi respuesta, expliqué cómo solucionar su problema "duplicando" comillas simples en el Sql que estaba tratando de construir, porque me parecía que tenía dificultades para ver (literalmente) qué estaba mal con qué estabas haciendo.
Una forma alternativa (y mejor) de evitar su problema (y la que siempre uso en la vida real) es usar QuotedStr()
función. El mismo código se convertiría en
aSQLText := 'INSERT INTO b_tbl (Name, Family) VALUES (%s, %s)';
aSQLCommand := Format(aSQLText, [QuotedStr(namee), QuotedStr(family)]);
De acuerdo con la Ayuda en línea:
Lo que significa "repetido" es lo que me he referido como "doblar". Por qué eso es importante, y la razón principal por la que uso QuotedStr es para evitar que el motor de base de datos Sql arroje un error cuando el valor que desea enviar contiene un carácter de comilla simple como en O'Reilly .
Intente agregar una fila que contenga ese nombre a su tabla usando MySql Workbench y verá lo que quiero decir.
Por lo tanto, el uso de QuotedStr no solo hace que la construcción de declaraciones SQL como cadenas en el código Delphi sea menos propensa a errores, sino que también evita problemas en el back-end.