タイトル通りにデータベースから255バイト以上のカラムのデータを抽出したいのですが
例えば次のようなテーブル(MS-SQL)があったとして
testtable
----------------
coloumn1 varchar(500)
coloumn2 varchar(200)
普通の検索SQLを使って次のようにDELPHIコードを
書いてみましたが・・・
function Tpr.GetProjectCD: string;
var
sSQL: string;
clmn1, clmn2: string;
begin
result := '';
sSQL := ' SELECT coloumn1, coloumn2 FROM testtable ';
with dm.qryWork do begin
Close;
SQL.Clear;
SQL.Add(sSQL);
OPEN;
if RecordCount > 0 then begin
result := FieldByName('coloumn1').AsString;
end;
end;
end;
いくらやってもカラム1のデータが255バイトしか取り出せないです。
カラム1に入っている全てのデータを取り出したい場合は
どうすれば良いのでしょうか。
ご存知の方はぜひ教えてください。これの為もう三日間苦労しています。
ではどうぞ宜しくお願いいたします。
いつかさん、こんにちわ。
BLOBの読み込みになると思います。
var
strs: TStream;
Buff: string;
begin
strs := qryWork.CreateBlobStream(qryWork.FieldByName('coloumn1'),bmRead);
try
strs.Read(Buff,strs.Size);
finally
strs.Free;
end;
end;
で読み込めたと思います。
お返事ありがとうございます。
早速ですがおっしゃった通りにしてみましたが
キャスティングエラーがしてしまいます。
それで下記の感じで試してみましたが
if FieldByName('coloumn1').IsBlob then begin
// 教えてもらったコード
end
やはり通らないですね。該当カラムが255バイトを超えていても
データタイプがBLOBタイプではないためだったか
教えてもらった方法ではダメでだったんですが
申し訳ありませんが他に良い方法ないでしょうか。
では、宜しくお願いします。
やはり、255バイト以上のデータを使うなら
カラムのデータタイプをBLOBに指定しなければならないでしょうか。
困りますね。
FireBirdでvarcahar(300)で作成したフィールドを見ると
Memoフィールドになっていました。
> result := FieldByName('coloumn1').AsString;
を
result := FieldByName('coloumn1').AsMemo;
でやってみては同でしょうか。
Delphiのバージョンは何でしょうか?
pekesukeさん、お返事してくださってありがとうございます。
早速ですが教えてもらった通りにAsMemoでやってみましたがコンパイルに通らないです。AsMomoプロパティーが未定義の識別子として扱われているようですが
自分が何か間違えたのでしょうか。
HOtaさん自分のDelphiのバージョンはDelphi7です。ちょっと古いバージョンですが会社ではこれ以上バージョンアップする気は全くなさそうですね。
実際に同パッケージの新しいバージョンの開発にも.Netを使ってるし
もしかしてDelphiは近いうちこの業界でなくなるかも知れないですよね。
接続に使っている方法は
・BDE
・ADOExpress
どちらでしょうか?
BDE接続であれば、
http://support.codegear.com/article/36002
まず、こちらをご覧ください。
DEKOさん
お返事ありがとうございます。
接続方式はBDEを使っています。
質問ですが
http://support.codegear.com/article/36002
こちらのページでどれを参照するば良いのでしょうか。
現在自分のパソコンに入っているBDEのバージョンは最新バージョンであるBDE5.2ですが・・・
SQL Server 6.5以前ではvarcharは255文字までなので、
http://support.microsoft.com/kb/290413/ja
BDE5.2よりも以前のバージョンではどうやっても255文字までしか取得できません。
BDE5.2でも同様となると、DB-Libraryのv7.0でもその制限が引き継がれているのかもしれません。
# DB-LibraryはMicrosoftの提供ですし、
# BDEは開発が終了しています。
...となると、方法は2つです。
1.ADO Expressで書き直す。
2.ODBCでの接続に変更する。
BDEを使う前提なら後者しか選択の余地はないような気がします。
# "Select convert(text, coloumn1) From testtable"のように
# 型変換を行えば或いは...?
>もしかしてDelphiは近いうちこの業界でなくなるかも知れないですよね。
...ちなみに、これってDelphiのせいですかね?
># 型変換を行えば或いは...?
型キャストならこっちですね。
Select Cast(coloumn1 as text) From testtable
DEKOさん
親切なお答え真にありがとうございました。
本当に助かりました。
社内でこれに対して打合せした結果、結局ADO Expressで書き直すことになりました。
色々長い間お世話になりました。
SQLServerのバージョンも出ていませんが、結局はSQLServerの仕様が変わったのが原因ですね。
ツイート | ![]() |