プロが教える店舗&オフィスのセキュリティ対策術

Microsoft Basic では,

OPEN File18$ FOR ISAM Custbl "Nani" AS #11: '要 TYPE宣言 Custbl
CREATEINDEX #11, "CuIDIdx", 0, "Siran": '重複可 インデックス名"CuIDIdex" 新規作成
SETINDEX #11, "CuIDIdx"

より簡易データベースを使用できました。これらは、 cobol の sort file の雰囲気で使用してきました。
Visual Studio 6.0 の Visual Basic 文法ヘルプ(VBENLR98.CGM)内 OPEN ステートメントには,記載がありません。
マイクロソフト系簡易データベースを Visual Basic で利用するための文法を解説しているヘルプファイルはどれなのでしょうか。
それとも Professional Edition のため入っていないのでしょうか。

A 回答 (7件)

>>ODBCデータソース「ISAM2」があるとします


>の条件が満足できず.お教えいただいたプログラムの実行はできませんでした。

あ、少し考え違いをされているようです。
「ISAM2」は、お使いのWindows上の操作にて作成するものです。
例えば、WindowsXPの場合ですと、
スタート→コントロールパネル→パフォーマンスとメンテナンス→管理ツール→データソース(ODBC)を起動します。

次に、システムDSN→Text-Trieverを実行します。(Text-Trieverは、ISAM形式のテキストファイルにアクセスするためのデータベースドライバです。)
データソース名には適当な名前を付けます。先の例では、これに「ISAM2」という名前をつけました。
(尚、先に書きましたように、標準の構成でText-Trieverが入っているかどうかは未確認です。)

次に、「現在のフォルダを使用する」のチェックを外し、「フォルダの選択」から、テキストファイルが格納されているフォルダを指定します。
更に、「オプション>>」をクリックし、「書式の定義」をクリックしますと、ファイル中のフィールド定義を行うことが出来ます。
(ISAMであれば、恐らく「固定長」を選択すればいいはずです。
対象となるファイルをまず選び、書式を固定長にし、各フィールドごとに、フィールド名、データ型、列幅を入力して「追加」を押下、ですね。)

以上のような感じで、該当のファイルにアクセスできる準備が整いますので、後は、他のODBC経由のデータベースと同等の操作でOKな筈です。
先のサンプルなどは不十分な点も多いですので、矢張り市販の書籍などを見て試行錯誤されるのが理解への近道なのでは、と思います。

ODBCは、少しクセがあるものの、一度慣れてしまえば後々役に立つことがあるかもしれません。
焦らず一歩ずつ覚えていけば、そのうちに使いこなせるようになるはずです!

この回答への補足

システムが合わないです。
ODBC関係のツールは
Microsoft Visual Studio 6.0
Microsoft Visual Basic 6.0
(新しいプロジェクト内の) キャンセル
アドイン
ビジュアルデータマネージャー
で起動し.関係ファイルを作成することになるようです(やっと見つかりました.i/o, 1999.10., p74。ただ私の使い方は一切表示をしないので表示変数領域を作業領域に割り当ている方法が記載されている関係で.宣言関係の変更ができませんでした)。

市販書籍の使用につきましては.下記質問を参照してください。
マイクロソフト社が責任を持って言語の文法解説書を発行していません。したがって.他の言語も同様と考えられます。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=677240

現在1000程度のファイル書き換えが安定して動作しない(おそらくファイルバッファとしてメモリーが分断された結果.VBインタープリターが動作できなくなっていると考えられます)ので.マイクロソフト社のサイトの使用を見合わせています(取扱説明書に書き込む事と同様に.私用ライブラリとして内容を書きかえられませんから)。現在ファイルバッファ領域の変更方法を探しています。何年か前の雑誌に書いてあったはずなのです。
各社で発行している解説本については.たとえば.マイクロソフト社でコレクションの概念を用いた頃に発行になったある本では「MS-DOS系の開発言語を覚えている人々の為に」と明言しておきながら.コレクションの概念の説明がほとんどされません。言語開発ソフトの操作方法.新規に導入された概念の両方の説明がなければ.新しい言語になじめませんから。他の本も同様かと思います。

また.覚える価値があるかどうかは疑問です。というのは.

http://www3.kcn.ne.jp/~wataru/vb/ado.htm
' レコード追加
With lobjRS
.AddNew
.Fields("number") = "00000010"
.Fields("name") = "taro"
.Fields("age") = 18
.Update
End With

http://acvb.s19.xrea.com/doc/013.html
rs.AddNew
rs!ID = "9999"
rs!入力日 = Date
rs!金額 = 200
rs!品名 = "その他" 'レコードを追加する

rs.Update '更新する

http://acvb.s19.xrea.com/doc/014.html
rs.AddNew "名前", "新入社員"

と変化しています(いずれも私の環境では動作しません。)。
rsやlobjRSの宣言については.以前お教えいただいた内容と同じです。

また.マイクロソフト社におけるデータベース関係の文法の変化が著しいので.自分にあったライブラリを用意して.以後.このライブラリだけを使用することを考えたほうが良いかと思います。
1987年頃 MS-Basic の ISAM
1995年頃 Access97やVB4で使用されていたDAO(Data Access Object)
1999年頃 Access2000で使用されていたADO(Active Data Object)
そして最近は.SQLとなりつつあります。わずか5年程度で言語仕様が根本的に変化するということは.覚える価値がないのです。高齢になり新しいことが覚えられなくなったらば.解雇する(新規言語を教育するのは無価値。覚えている環境をそろえる事が必要との旨の説明がVisual Studioのマニュアルに記載されています)と考えられますから。また.コンピューター関係の商取引のための共通語としての JIS X 0001 から JIS X 0022 が定められています。マイクロソフト社がJIS認定工場でないにしても.日本で商取引を行うのであれば.用語としてJISを使うのが当然でしょう(JIS認定工場は1桁ですが.認定工場以外の商取引の規格として残っている規格が結構ある)。しかし.独自性の高い(好き勝手で統一性のない)定義には困ります。
また.Visual NETでは旧来のファイル入出力関係が廃止されたようです。つまり.覚えてもすぐに使えなくなることが予想されます。

以上上げたソフト例はいずれも現時点で動作に成功していません。おそらく動作環境の問題と思われます。
解釈が困難なエラーメッセージ(ヘルプを参照するとADOヘルプメッセージの「ようこそ...」と表示されてしまい解説になりません)
あるいは.「引数の型が一致していない」との旨の説明が出ますが.AddNewの引数(VBは何かのプロシージャと解釈しているようです)を調べる方法を見つける方法がみつかりません。

参照したサイトは以下のとおり。
http://acvb.s19.xrea.com/ Microsoft Access Tweak
http://www3.kcn.ne.jp/~wataru/vb/vb.htm VBでもやってみようか

補足日時:2003/12/14 23:28
    • good
    • 0

>システムが合わないです。



ん~、環境によって違いはありますからね。
お使いのOSのバージョン、VBのバージョン、DAOやADOといったミドルウェアの種類とバージョン、エラーが出るのであれば、その時のエラーメッセージ等があれば、より詳しい回答が付くかと思いますよ。

とりあえずカンでの回答なのですが、参照設定を見直されては如何でしょうか。
お書きになったURL(http://acvb.s19.xrea.com/doc/013.html)と同じような参照設定になっていますか?

>また.覚える価値があるかどうかは疑問です。というのは.

>と変化しています(いずれも私の環境では動作しません。)。

に関しては、バージョンによる構文の違いではなく、複数の書き方がサポートされているってことです。
この辺の文法は、昔からさほど変わっていないので、VB6.0であればどちらの書き方で書いても動作すると思います。
(逆に言えば、動作しないのであれば、構文以外の面が原因であると思われます。)


(以下、蛇足です)
確かに、コンピュータ関連は変化の早い業界ですよね。
次から次へ新技術が登場して、古くなれば容赦なく切捨てられる…
覚悟の上とはいっても、因果な商売だと思いますね、自分でも。

ミドルウェアの変遷にしても、MS社だけで15年間で3世代ですか。それ以外にもJAVAにはJAVAのミドルウェアがあったりと、数を挙げていけばきりが無いですねぇ。
結局、どんなやり方を採るせよそれぞれ一長一短があって、その時々でどれにするのかを決めていかなくてはならないんですよね。
もし、将来にわたって技術の変化が無いことが保障されているんであれば、心置きなく日々の勉強をサボることが出来るんですが(笑)。


>また.マイクロソフト社におけるデータベース関係の文法の変化が著しいので.自分にあったライブラリを用意して.以後.このライブラリだけを使用することを考えたほうが良いかと思います。

確かに、用途を限定するのであれば、そういう考え方も有るかと思います。
データの規模も行うデータ操作も(将来にわたって)一定の範囲内に限定されているのでしたら、恐らく仰るやり方の方が有利なのでしょう。

反面、複雑なデータ操作を行ったり、大量のデータを高速に処理する必要に迫られたり、といった局面がもし有るのだとすれば、やはり独自ライブラリでは限界が出てしまうのではと思います。
既存のライブラリを使えば数行で済む内容を、独自ライブラリのために数百行も費やして、テストや仕様書作成の手間もかけなくてはならない、といったコスト面での問題も出てくるでしょうし。

この回答への補足

参照設定はあわせてありました。ただ.余分な設定の影響があるかもしれません。
使用していた機器のおそらくメインボードが半断線になり、振動で暴走するようになりました。原因の特定および復旧作業に手間取り応答が遅れたことをお詫びいたします。

ms-basicでISAMの制限を逃れるソフトを作ってありますので、ちょっと移植する程度です。速度は期待していません。ms-basic+ペンテ133MhzのPC-9821(1996年頃)の半分程度の速度しか、VB 6.0発売当時(1999年頃)のWindowsでは出ませんから。
また、大きな問題(ボリウム分割が必要程度の大きさ)には、マイクロソフトの製品では未対応です。この点は自作ソフトで目一杯苦しんだ内容です。従って対応済みです。
小さくない問題(同一ボリウム内の1/3程度の大きさ迄)では、複数キーの問題があります。私のソフトではシングルキーしか対応していません。当座の問題としては、キー以外の内容を元にして削除を行う時に全体を読みなおす必要があることです(ISAMではファイルハンドルが1キーあたり3つも使われる。システムに3+3必要で、ユーザーファイルを10個ぐらい同時openしているので、1キーしか作らなかった)。
またセクター長が固定なので最大長にあわせる必要がありファイルによっては90%以上が空白の場合があります。
複数フィールドに分割保存する方法(n88等の256固定フィールドの頃に良く使った方法。何人も絶句させてしまったので今はあまりやりたくないです)もありますが、データを固定して保存する方が楽で複数キーに対応する時にでも考えましょう。
小さな資源(1000個以下程度)では.システムが巨大過ぎるという問題があります。元々ボリウム分割を前提に作った内容なので、入力ボリウムが複数・出力ボリウムが複数・作業ボリウムが複数なんて余計な作業内容がありますから。

先日1つ移植して10000個1MB程度の少ないデータ量ですが.PC-9821(ペンテ133Mhz)で20分、Win98SE(ペンテ2400Mhz)で1時間程度と比較的高速に処理しているようです。これは、MS-Basicのメモリー制限で20-40KB程度以上のユーザーメモリーを使用するとシステムがハングするという特徴があります。そのために、少量づつ処理しているのでマルチタスク処理の場合に(他のタスク(Visual Basic本体等)の切り替えに使われてしまい)速度が遅くなりやすいためでしょう。処理単位を可変にして適当な場所を見つけるか、ご指摘のようにADOに変更するか、どちらにするか、今迷っています。

補足日時:2004/01/04 00:50
    • good
    • 0
この回答へのお礼

どうやら原因が特定できました。
http://www3.kcn.ne.jp/~wataru/vb/ado.htm
等で
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & lstrPath & ";"
のように末尾に半角の「;」を入れてOpenしていますが、これが抜けていたために

lstrPath = App.Path & "\test.mdb"
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & lstrPath & ";"
lstrSQL = "select * from student"
lobjRS.Open lstrSQL, cnn, adOpenForwardOnly, adLockPessimistic
のように「, cnn, adOpenForwardOnly, adLockPessimistic」を指定するような構文が全部エラー(オブシェクトを指定しろ)になりました。

またこのような宣言された語を使用しないでOpenする
myRS.Open "Select * from 名簿テーブル"
では.レコードを追記ができない状態でOpenされるために.わけのわからない英語のエラーメッセージ(3251)が表示され
myRS.AddNew
以下の構文がつかえなくなります。こちらは.末尾の「;」がなくてもOpen可能です。

文法エラーが発生しない障害なのか.省略形を認めている使用なのかヘルプメッセージからは読み取れませんでした。
本来ならば「何というオブシェクトがどこで抜けているから.指定しろ」とか.「○文で指定した構文によってこの命令は使用できない。使用するのであれば○文に×という指定を追記しろ」くらいのエラーメッセージを表示すべき(私の使っていたデカコンはメモリーが1MB、HDDが128MBしかないにもかかわらずこのあたりのエラーチェックは厳格であった)でしょうか、マイクロソフトのエラーメッセージ・ヘルプメッセージでは省略されています。
ヘルプファイルを眺めた雰囲気からすると任意のところを変更しても他のところを変更しないですむような文章の書き方であり、マニアルとしては欠陥商品でしょう。

一応.Open, Close, Read, Writeの4命令が使えるようになったので、一応区切りとし、他の問題は別の質問として掲載したいかと思います。いろいろありがとうございました。

お礼日時:2004/03/14 00:04

>sqlで検索したところ Visual C関連で英文のヘルプファイルが見つかりました。

時間をかけて和訳するしか方法がないようです。

どうしてそうなるんですか・・・
SQLとはRDBMSのための言語のことです。

他の方がかかれているように、ADOとかDAOなんてキーワードで検索してください。
    • good
    • 0

ADOやDAOに関しては、市販の書籍にも詳しいですよ。


内容はAccessやSQL Serverに接続する為のものが殆どかと思いますが、実際問題、ODBCが使えさえすれば、DBの形式が何であってもさほど違いは無いですので…

ODBCのテキストドライバに関しては、恐らくやってみれば判るかと思います。
テキストファイルの入っているフォルダを指定して、使用するテキストファイルと、そのフィールド定義を設定するだけですので。

MSDN内のADOに関するページはこちら。
http://www.microsoft.com/japan/msdn/library/defa …

同じく、ODBCに関するページはこちらです。
http://www.microsoft.com/japan/msdn/library/defa …

この回答への補足

関係しそうな頁すべてのダウンロードが先日終わりました。適当に組み合わせて私用HTMLファイル化にまだ時間がかかりそうです。

Visual studio では.英文の説明が ODBC Help(ODBC200.CHM), と 内容説明だけ日本語のMicrosoft Activexデータオブシェクト(ADO200.CHM)に 見つけることができました。

補足日時:2003/11/11 00:20
    • good
    • 0

>>MS製のDBでしたらAccessで使用されているMDBを


>持っていません。マイクロソフト社系データベースソフトが
>あまりにも低機能だったので.MS-Basicで自作しましたから。

Accessで使用していると書きましたが、使うのに必要とは書いていません。
あれば楽ですけど。

VBからMDBの作成、テーブルの追加、データの作成などがすべて行えます。
データ操作はSQLを使用します。
    • good
    • 0
この回答へのお礼

sqlで検索したところ Visual C関連で英文のヘルプファイルが見つかりました。時間をかけて和訳するしか方法がないようです。
お付き合いいただきましてありがとうございました。

お礼日時:2003/10/22 23:36

Windowsでは、ODBCという、DBにアクセスするための統一規格がサポートされています。


テキスト形式(ISAM)にアクセスするためのODBCドライバも、OS(だったかOfficeだったか)の中に含まれています。
で、このODBCを使用して、Excel,Accessその他のアプリケーションがDBにアクセスできるわけです。

VBからDBを扱う場合、「ADO」或いは「DAO」といったミドルウェアを用いるのが一般です。
始めにWindows上でODBCの設定(フィールドの定義など)を行い、その後で、VBからADO等を使用してデータにアクセスする、ってな感じになりますね。

ODBCドライバや、ADOについては、MSDNライブラリ等に詳しいかと思います。

以下、サンプルです。
ファイル「ISAM.TXT」にフィールド「A」「B」「C」があって、これアクセスするためのODBCデータソース「ISAM2」があるとします。
VB上でMicrosoft ActiveX Data Objects ?.? Library に参照設定がされていることとします。


Private Sub Command1_Click()
  Dim Conn As ADODB.Connection
  Dim RST As ADODB.Recordset
  
  Set Conn = New ADODB.Connection
  Conn.Open "ISAM2"
  Set RST = New ADODB.Recordset
  RST.Open "SELECT * FROM ISAM.TXT", Conn
  
  
  RST.MoveFirst
  MsgBox RST.Fields("A")
  RST.MoveNext
  MsgBox RST.Fields("B")
  RST.MoveNext
  MsgBox RST.Fields("C")
  Conn.Close
End Sub

見ての通り、最初のレコードのフィールドA,次のレコードのフィールドB,3件めのレコードのフィールドCを表示してます。
一般のデータベースと同じような感覚でアクセスできる為、柔軟性も高いんですよね。

この回答への補足

手持ちのVB内関係ヘルプメッセージを局所参照可能にタグ関係を修正しようと.VBでプログラムを作り実行.半分ぐらい処理したところでVBプログラムがハングアップし.処理の継続はできませんでした。大きな資源の場合の処理(分割実行等)が必要と思われたので.作成を途中であきらめました。
マイクロソフト社の関係情報を集めたのですが.局所参照をしようとすると.特定のサイトに接続しようとし.該当情報が見られませんでした。ファイル総数から大きな資源の場合の問題が発生すると考えられ.書き換えは見合わせています。

私の場合.コボルのソートファイルの代用として.データベース処理を実行していますので.
>ODBCデータソース「ISAM2」があるとします
の条件が満足できず.お教えいただいたプログラムの実行はできませんでした。
プログラム内で.適当なフィールドを作り.関係情報を書き出し.関数としてデータベースファイルを参照して(データベースファイルの指示にしたがって入力ファイルから書き換えた内容を出力ファイルとして作成する).プログラム実行終了後にデータベースファイルを破棄する(保存するだけのディスクスペースがない)

という使い方がほとんどです。HDDに過度な負荷を加えるソートプログラム(データ数200-300程度に分割して整列し作業ファイルに保存.作業ファイルを合併する)が手元にあるので.40万個程度でも1時間程度で整列できるので.こちらを使うか.
データベースといっても.単なる文字関数ですので.たとえば
http://www.okweb.co.jp/

OKWeb
に書き換えればなんとかなるから.巨大なIF文群からなるプログラムを作るプログラムを作るか.自前で外部参照配列を作るか.等も考え始めました。
当座は.マイクロソフト社のサイトをさまよって見ます。

補足日時:2003/11/26 00:30
    • good
    • 0
この回答へのお礼

手持ちのVisual Studioは.サブセット版らしく.関係情報の多くは掲載されていませんでした。
ゆっくり時間をかけて探すしか方法はなさそうです。
お付き合いいただいてありがとうございました。

お礼日時:2003/10/22 23:34

VBからは大抵のDBに、DAOやADOといったミドルウェアを使用してアクセスできます。



簡易かどうかは分かりませんが、MS製のDBでしたらAccessで使用されているMDBを使うのはどうでしょうか?

この回答への補足

>MS製のDBでしたらAccessで使用されているMDBを
持っていません。マイクロソフト社系データベースソフトがあまりにも低機能だったので.MS-Basicで自作しましたから。

補足日時:2003/10/19 01:15
    • good
    • 0

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