0

Delphi / NexusDBを使用し、実行時にSQL(約800文字の長さ)をビルドしてから、それをnexusdb query.sql.textプロパティに渡して実行しましたが、実行時に無効なトークンのエラーが見つかりました。

私はこのようにSQLを渡します

Query.SQL.Text := VarStrSQL; // <<---- string variable holding the SQL

トレースしたところ、Query.SQL.TextでSQL文字列が326文字にトリミングされていることがわかりました。SQLを保持する文字列変数は完全で問題ありませんが、その変数をquery.sql.textに割り当てると、326文字しか渡されません。もちろん、これにより、無効なSQL構文でエラーが発生します。

SQL文字列がそのようにトリミングされた理由を教えてください。

更新: * memo1.lines.text:= VarStrSQLを試しましたが、メモコンポーネントにもトリミングされた文字列が表示されます!! 私の文字列の文字がそれを引き起こす可能性はありますか?TStringsが私の文字列をトリミングする原因となるDelphi2010のバグ?*

ありがとう

4

2 に答える 2

3

DBプロバイダー自体のバグのように聞こえます。にはそのような制限はありませんTQuery

私のアドバイスは、小さなSQLを使用することですが、データを設定するためにパラメーターをバインドします。

それ以外の

Query.SQL.Text := 'INSERT INTO Store_Information (store_name, Sales, Date)
VALUES ('Los Angeles ... ... ...', 900, '10-Jan-1999')';

コード

Query.FieldByName('store').AsString := 'Los Angeles ... ... ...'; // here you should have no limitation
Query.FieldByName('sales').AsInteger := 900;
Query.FIeldByName('Date').AsDAteTime := Now;
Query.SQL.Text := 'INSERT INTO Store_Information (store_name, Sales, Date)
VALUES (:store,:sales,:date)';

また、ステートメントはエンジンによって準備されてから再利用される可能性があるため、リクエストはより高速になります。

于 2012-02-11T08:49:33.930 に答える
0

問題が見つかりました:nxtCharフィールドがnullの場合、値は#0であり、文字列のトリミングが発生します

ただし、このvarisnull()のようにnullをチェックしましたが、charフィールドはこのトラップ関数をスキップできました!!! 何時間も自分の周りを回るようになり、ついにこのようにチェックします

If <nxtChar field> = #0 then <nxtChar field> = '' (or <nxtChar field> = null)
于 2012-02-11T12:28:08.570 に答える