sql >> Databáze >  >> RDS >> Mysql

Neznámý sloupec v seznamu polí

Je to proto, že vaše

VALUES (%s,%s)

neohraničuje obsah proměnné namee a family uvozovkami. Váš back-endový SQL engine si proto myslí, že váš mohsen je název sloupce, nikoli hodnota.

Místo toho použijte např.

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

jako v

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

V původní verzi své odpovědi jsem vysvětlil, jak vyřešit váš problém „zdvojením“ jednoduchých uvozovek v Sql, který jste se snažili vytvořit, protože se mi zdálo, že máte potíže (doslova) vidět, co je na tom špatně dělali jste.

Alternativní (a lepší) způsob, jak se vyhnout vašemu problému (a ten, který vždy používám v reálném životě), je použít QuotedStr() funkce. Stejný kód by pak byl

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

Podle online nápovědy:

To, co znamená „opakované“, je to, co jsem označil jako „zdvojnásobení“. Proč je to důležité a hlavním důvodem, proč používám QuotedStr, je vyhnout se tomu, aby SQL db-engine vyvolal chybu, když hodnota, kterou chcete odeslat, obsahuje jeden znak citace jako v O'Reilly .

Zkuste přidat řádek obsahující tento název do vaší tabulky pomocí MySql Workbench a uvidíte, co tím myslím.

Díky použití QuotedStr je tedy vytváření příkazů SQL jako řetězců v kódu Delphi nejen méně náchylné k chybám, ale také se vyhnete problémům na back-endu.



  1. Jak použít vypočítaný sloupec k výpočtu jiného sloupce ve stejném zobrazení

  2. ALTER TABLE v MySQL:Přítel nebo nepřítel?

  3. Je možné předat proměnnou volání uložené procedury v mysql?

  4. 4 Předdefinované metody konverze dat SQL a případy použití