3

Delphi 2007 の ADO を使用して、SQL Server 2000 データベースにデータを挿入しようとしています。

これまでのところ、次のようなものを書いてきました。

insert into (a,b)
select :a,:b

qry.parameters.parambyname('a').value := '';
qry.parameters.parambyname('b').value := '';

私が得るエラーは次のとおりです。

データ型 text からデータ型 nvarchar への暗黙的な変換は許可されていません...
convert 関数を使用してこのクエリを実行してください。

表の列は NULL 値を許可します。

私が欲しいのは、値が '' である SQL Server テーブルに NULL が表示されることです。どうすればそれを達成できますか?

4

8 に答える 8

2

これらの行に置き換えることができます

qry.parameters.parambyname('a').value := Null;
qry.parameters.parambyname('b').value := Null;
于 2012-08-20T15:12:28.543 に答える
1

書かないでくださいnull; それはnil

<TAdoDataSet>.FieldByName('a').AsVariant:= Nil; 
于 2012-10-10T18:34:22.493 に答える
1

試す

qry.parameters.parambyname('a').Clear;

于 2012-08-23T00:22:30.550 に答える
1
qry.parameters.parambyname('a').AsVariant:= Null; 

でなければなりません

<TAdoDataSet>.FieldByName('a').AsVariant:= Null;
于 2012-08-20T14:57:40.910 に答える
1

用途を追加 --> バリアント;

これらの行に置き換えることができた後

qry.parameters.parambyname('a').value := Null;
qry.parameters.parambyname('b').value := Null;
于 2014-03-05T09:38:17.763 に答える
1
qry.parameters.parambyname('a').value := unassigned;
于 2012-08-20T14:19:04.317 に答える
1

使用してみてください:

qry.parameters.parambyname('a').value := Null;
qry.parameters.parambyname('b').value := Null;

また

パラメータをまったく設定しないでください。デフォルトでは、パラメータは「Null」に設定されています。

Null は Variant の特殊な型 (Variant を使用) であり、空の値 (型を持たない) を定義します。

于 2012-08-20T14:19:19.897 に答える
0

ADOQuery を使用して、テーブルの「選択」を記述します。私はそれをたくさん使います。

Select * From MyTable Where 0=1

そして、ADOquery コンポーネントをダブルクリックします。フィールドリストウィンドウが表示されます。すべてのフィールドを追加します (右クリック)。このようにして、Delphi コード内でフィールドを使用できます。

MyTable.Open;
MyTable.Append;
MyTableAFieldFromMyTable.AsInteger := 0;
MyTableAStringFieldFromMyTable.AsString := 'Hello, World';
MyTable.Post;

あなたの質問に関しては:

MyTableAnotherFieldFromMyTable.Clear;

SQLサーバーでわかっているように、値をNULLに設定します。編集:動作コードを確認しました。次のコードで、テーブルからビデオ フィールドをクリアします。

Ornek.Open;
Ornek.Edit;
OrnekVideo.Clear;

クエリは「select * from Ornek Where 0=1」だけで、フィールドの .AsInteger、.AsString などのプロパティを使用して Delphi コードで割り当てを行います。

于 2012-08-20T14:38:32.860 に答える