お世話になります。
教えて頂きたい事があるのですが、
OleVariant型ポインタで指定してあるデータをADODataSetへ
渡す(関連付ける)方法です。
今は
ADODataSet1 := @OleVarianr1;
ADODataSet1.First;
ShowMessage(ADODataSet1.FieldByname('A1').AsString);
としていますがデータが表示されません。
ShowMessageでアドレスエラーになります。
@OleVarianr1にも値が入っているのでデータはあると思うのですが。
解決方法ご存じの方、ご教授お願い致します。
>OleVariant型ポインタで指定してあるデータ
は、どのような形式でデータが格納されているのですか?
データはSQLServer2005からの集計結果です。
>データはSQLServer2005からの集計結果です。
それは、どのような形式で格納されているのですか?
あの・・・まず文法からしておかしい気がするのは私だけでしょうか。。。
「ADODataSet1」の型が不明ですが多分TADODataSetなのでしょう。
アドレスを渡すのですからまずこんな感じにしないとエラーが出ますよね?
var
ADODataSet1: ^TADODataSet;
begin
ADODataSet1 := @OleVariant1;
ADODataSet1^.First;
ShowMessage(ADODataSet1^.Fields[0].AsString);
end;
OleVariant1がDataSetとして扱えるものである事が前提ですが。
igy様
>どのような形式で格納されているのですか?
ExcelのVBScriptのサンプルからなので形式は解りませんが
通常の結果セットだと思います。
---VBScript---
ADODataSet1 = OleVariant1
Sheet1.Cells(cn, 1) = RTrim(ADODataSet1.Fields("DT1"))
Sheet1.Cells(cn, 2) = RTrim(ADODataSet1.Fields("DT2"))
---------------
めじな様
めじな様のサンプルの様にしてみたのですが、今までと同じで
ShowMessageの行でエラーになります。
VBScriptで出来ている様ですので、DELPHIで何とか出来ないもので
しょうか?
igyさんもおっしゃっていますがどのような型?形式?かが分からない事には返答が難しいです。
GTRさんの文章では何を使ってどうやって値を取ってきてどのようにOleVariant1に渡したのか想像がつきません。
またエラーメッセージも正確に載せて頂けるとみなさんから返事がつきやすいと思います。
めじな様
具体的な事を記入せずすみませんでした。
やっている事は
1.検索条件を指定しCOMサーバーにアクセスします。
COM1.GetData(Jouken.Recordset,OleVariant1);
2.OleVariant1に結果セットのポインタがセットされます。
3.ADODataSetを使ってデータを取り出そうとしています。
ADODataSet1 := @OleVariant1
4.ShowMessageでデータが取得出来たか確認しています。
ShowMessage(ADODataSet1.Fields[0].AsString);
モジュールXXXXのアドレス004C5F4でアドレス01AC00ADに対する
読み込み違反がおきました。
になります。
5.Excelサンプルで表示される項目は7項目で
数値、文字、数値、数値、数値、数値、数値です。
あまり具体的に書けませんでしたが・・・
COMを作成したところからはExcelのVBScriptのサンプルしか
もらえないので、困っております。
COM,ADODataSetの理解が足りないのですが、
皆様のお力をお貸し下さい。
OleVariant1が何か分かりませんがADOのRecordsetだと仮定します。
(多分そうだと思うのですが)
ADODataSet1をVariantで宣言してADOのレコードセットだと明示したらどうでしょうか。
var
ADODataSet1: Variant;
begin
ADODataSet1 := CreateOleObject('ADODB.Recordset');
〜
ADODataSet1.Close;
(テストしている訳ではないのでエラーが出るかもしれません)
めじな様
有り難うございます。
例に書いて頂いたコードで実行してうまくいきました。
igy様
お世話になりました。
有り難うございます。
ツイート | ![]() |