- 締切済み
VBA ADOに関して
お世話になります。 VBAに関して質問があります。 ADOでDBから値を取得する際、 TEXT型の値が全く取れてきません。 どなたか取得方法をご教授下さい。 宜しくお願い致します。 DB:Sybase OS: RedHat 8.0 Dim rs As ADODB.Recordset Dim sql As String sql = "select * from " & tblName //dbはADODB.Connection Set rs = db.Execute(sql) Do While Not rs.EOF //ここでTEXT型だと、取れてきません。 If IsNull(rs.Fields('Field名').Value) Then End If rs.MoveNext Loop
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- hacker_d
- ベストアンサー率0% (0/7)
最初の変数宣言を、 「Dim rs As ADODB.Recordset」ではなく 「Dim rs As new ADODB.Recordset」としてみれば? あと、「Connection」や「Command」にも「new」をつけてみれば? まぁ「Command」は使っていたらの話ですけどね。 まぁ気休め程度ですけどねw
> //ここでTEXT型だと、取れてきません。 >If IsNull(rs.Fields('Field名').Value) Then 内容がNullでないのでは? If Nz(rs.Fields('Field名').Value,"") = "" then として、Nullのチェックでなく、文字列でチェックしてみたら如何でしょう。
SQL Sever に ADODB でアクセスするサンプルです。 Public Function DBLookup(ByVal strField As String, _ ByVal strTable As String, _ Optional ByVal strWhere As String = "", _ Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup Dim DataValue Dim strQuerySQL As String Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset strQuerySQL = "SELECT " & strField & " FROM " & strTable If Len(strWhere) > 0 Then strQuerySQL = strQuerySQL & " WHERE " & strWhere End If With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then .MoveFirst DataValue = .Fields(0) End If End With Exit_DBLookup: On Error Resume Next rst.Close Set rst = Nothing DBLookup = Nz(DataValue, ReturnValue) Exit Function Err_DBLookup: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBLookup End Function <Execute のサンプル> Public Function CnnExecute(ByVal strSQL As String) As Boolean On Error GoTo Err_CnnExecute Dim isOK As Boolean Dim cnn As ADODB.Connection isOK = True Set cnn = CurrentProject.Connection With cnn .Errors.Clear .BeginTrans .Execute strSQL .CommitTrans End With Exit_CnnExecute: On Error Resume Next cnn.Close Set cnn = Nothing CnnExecute = isOK Exit Function Err_CnnExecute: isOK = False If cnn.Errors.Count > 0 Then ErrMessage cnn.Errors(0), strSQL cnn.RollbackTrans Else MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _ vbExclamation, " 関数エラーメッセージ" End If Resume Exit_CnnExecute End Function
お礼
説明不足ですいません。 接続は出来てますし、Text型以外(varcharなど)のデータは取得できています。 なぜかTEXTだけ、とれてこないのです。
If IsNull(rs.Fields('Field名').Value) Then End If そもそもデータ取得文がないし、未入力の時だけ何かしてそうだし・・・。 もう少し、コードを示すべきかと・・・。
- king_joe1006
- ベストアンサー率37% (70/189)
If IsNull(rs.Fields.Item('Field名').Value) Then ではどうでしょう?
お礼
ありがとうございます。 取得できませんでした。。
補足
これまた、説明不足ですいません。 Accessではなく、EXCELです。 んー。Sybaseの制限でもあるのでしょうか。。