Autor Téma: ADO + Tfieldtype + ftstring versus ftwidestring  (Přečteno 73 krát)

Offline rob.

  • Nováček
  • *
  • Příspěvků: 38
  • Karma: 0
Ahoj,
v db je textove pole deklarovano jako nvarchar, vkladam do nej parametrickym sql prikazem textovy retezec z tedit.text. Pokud v parametru sql deklaruji pole jeko ftstring, azbukou zadany retezec se v db objevi jen jako retezec otazniku o delce toho stringu, coz by me moc neprekvapilo pokud bych delal ve stare, neunicode verzi delphi, nebo pole v db nebylo jako nvarchar. Pokud pole v dotazu specifikuji jako datatype:=ftwidestring, je retezec korektne v db ulozen v azbuce. V napovede delphi je uvedeno ze Tfieldtype ftstring odpovida string delphi (tedy ne treba ansistring), tzn, bych cekal ze v unicode verzi delphi (kde string je  unicode) jaksi automaticky tento problem nenastane i kdyz pouziji ftstring. Mam tedy chapat ze ftstring kazdopadne neodpovida string z delphi a musim vsechna textova pole v dotazech deklarovat jako ftwidestring (nezavisle na tom jestli delam v delphi 7 nebo treba 10)? Proste pro pripad, ze si v ceskem programu na ceskych win obcas nekdo muze chtit ulozit cizi vyraz v jine znakove sade. A vi nekdo jak by se to chovalo na treba ruskych windows, kdyby pole bylo jako ftstring.... ?

diky za zkusenosti

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1646
  • Karma: 65
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:ADO + Tfieldtype + ftstring versus ftwidestring
« Odpověď #1 kdy: 05-04-2019, 11:36:52 »
Excellent
Rated 1 time
Obecne mel byt datovy typ ftString nazvan radeji ftAnsiString, ale uz je pozde toto menit kvuli zpetne kompatibilite (podobne pak property AsString mela byt spis AsAnsiString). Samozrejme to, jak se bude s daty manipulovat v pripade vyuziti ANSI variant je na dane implementaci knihovny.

V Delphi implementaci ADO je u parametru datovy typ ftString mapovan na adVarChar, zatimco ftWideString na adVarWChar (viz. pole DataTypeValues deklarovane v modulu Data.Win.ADODB mapovane na TFieldType modulu Data.DB). Pro vyznam z pohledu ADO pak viz DataTypeEnum. Cili ftString je ANSI, ftWideString Unicode.

Pokud je zminovany sloupec definovan typem NVARCHAR, je treba pouzit Unicode datovy typ i na strane klienta, tedy pro ADO parametr pouzit datovy typ ftWideString.
« Poslední změna: 05-04-2019, 11:40:26 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline rob.

  • Nováček
  • *
  • Příspěvků: 38
  • Karma: 0
Re:ADO + Tfieldtype + ftstring versus ftwidestring
« Odpověď #2 kdy: 05-04-2019, 12:09:32 »
Excellent
Rated 1 time
diky moc za fundovanou odpoved, to jsem presne potreboval.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Kolik je šest plus čtyři (slovem):