電子書籍の厳選無料作品が豊富!

mdbファイルを、VB6.0+ADO2.7で扱っています。

文字型フィールドに数値データが入力されたレコードを抽出したいのですが、何かよい方法はないでしょうか?
そのフィールドに文字型データが入力されているレコードもあり、それを除外したいのです。
SQLでも、.filterプロパティでも結構です。お知恵を下さい。

よろしくお願いします。

A 回答 (4件)

Excel2000 VBA+ADO2.7 で試しましたが、


WHERE条件に IsNumeric(フィールド名) で良いのでは?

以下、試したプログラム
Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQL As String
Dim dbName As String
Dim dbPath As String

dbName = "db1.mdb"
dbPath = ActiveWorkbook.Path & "\"

cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dbPath & dbName & ";"

SQL = "SELECT * FROM T1 WHERE IsNumeric(Data);"
rs.Open SQL, cnn, adOpenForwardOnly

Do Until rs.EOF
 Debug.Print rs![Data]
 rs.MoveNext
Loop
    • good
    • 0
この回答へのお礼

しばらくgooをチェックしていなかったので、お礼が遅くなり失礼しました。

極めてシンプルな方法ですが、完璧に動作しました。
何故、思いつかなかったのだろう。。。(^_^;)

ありがとうございました。

お礼日時:2007/02/20 11:29

ワンクッション置かせても良い、というならば…



IsNumeric( 列 ) が True かどうかで判断できるんじゃないかな?
で、それが True のやつだけに絞り込ませて、仮想表を作る…というアプローチは?

こういうイメージ。

Dim dt仮テーブル As DataTable = SELECT文の発行結果
For iRow As Integer = 0 To (dt仮テーブル.Rows.Max - 1)
 Dim dr仮行 As DataRow = dt仮テーブル.Rows(iRow)
 Dim s仮値 As String = dr仮行.Item("問題の列").Value
 If IsNumeric(s仮値) = True Then
  INSERT文発行(dr仮行)
 End If
Next

※VB6での作り方は忘却の彼方なんで、VB.NETでの書き方をしてます
    • good
    • 0

#1です。



>CInt関数は、ADOのSQLでも使えるのでしょうか?
多分使えないと思います(^^;
で、どうするかですが、VBでmdbの中に作成されたクエリを実行できるはずです。VBは詳しくないので、具体的方法は知りませんが。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なるほど。私もやったことはないですが、出きることは知ってます。

お世話になりました。

お礼日時:2007/02/09 14:05

更新クエリを使う方法でこんなのはいかがでしょう?



1.フィールドを一つ増やす。(仮称)Val(数値型)
2.更新クエリ
UPDATE testtable SET testtable.val = CInt([文字列と数値の入っているフィールド名]);

3.更新実行後
SELECT testtable.*
FROM testtable
WHERE (((testtable.val) Is Not Null));

これで数値のあるレコードだけを選択できます
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

まだ試してはいないのですが、CInt関数は、ADOのSQLでも使えるのでしょうか?以前、別の質問で教えて頂いた、CStr関数は、ADOには実装されていなかったようなので。

お礼日時:2007/02/09 10:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す