[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/12/01(Wed) 10:04
投稿者名:おじん
Eメール:
URL :
タイトル:
mdbファイル(Access)の書きこみ
次のようにして「新規」にデータを書きこもうとしています。
この時、「質問の部分」について、教えてください。
Dim db as DataBase
Dim ds as Recordset
Dim Dbfile$'データバースファイル名をセット
Set db = DBEngine.Workspaces(0).OpenDatabase(DBfile)
Set ds = db.OpenRecordset("テーブル1", dbOpenDynaset)
If ds.RecordCount <> 0 Then
   ds.MoveLast
   ds.AddNew
End If
'質問はここのパートのやり方について<<<<<===
ds.Update
ds.close
db.close
Set ds=nothing
Set db=nothing

データベースのフィールドは、Access97のデザインで定義しました。
No    数値
Dat1 テキスト
Dat2 テキスト
以下、Dat25まで(25個)同じ形式のフィールドがあります。

質問1:同じ形式のものが続く場合、デザイン時に簡単な(手数が少ない)方法は
あるのですか。
質問2:上の「質問部分」において
Dim n&
for n=0 to 24
ds!dat(n)="データ"
next n
のような「繰り返し処理」をしたいとき、デザインはどのようにしたらよいのでしょうか。

付記:Dataコントロールを使用すると、
Data1.DatabaseName=DBfile
Data1.RecordSource="テーブル1"
Dim n&
For n=1 to 25
Data1.Recordset.Fields(n)="データ"
Next n
のように操作できることがわかったのですが、「新規に書きこむ」方法が
わかりません。

よりしくおねがいいたします。

投稿時間:2004/12/01(Wed) 11:38
投稿者名:カムリン
Eメール:kakurin@hotmail.com
URL :
タイトル:
Re: mdbファイル(Access)の書きこみ
>>デザインはどのようにしたらよいのでしょうか。
コード(ソース)をどう書くかってことでしょうか?
ならば、下記の感じです。

注意)私はAccess2000+DAOの場合しかやったことないので、間違ってるかも

for文を使わない場合、
Dim db as DataBase
Dim Dbfile$'データバースファイル名をセット
Dim StrSQL
Set db = DBEngine.Workspaces(0).OpenDatabase(DBfile)
StrSQL=新規書き込み用のSQL文
db.Execute StrSQL
db.close
Set db=nothing
で出来る思います。

SQL例
INSERT INTO テーブル1 (対象フィールド1,対象フィールド2) VALUES (書き込みデータ1,書き込みデータ2)

for文を使う場合
Dim db as DataBase
Dim ds as Recordset
Dim Dbfile$'データバースファイル名をセット
Dim n as nの最大値が格納できる方で宣言
Set db = DBEngine.Workspaces(0).OpenDatabase(DBfile)
Set ds = db.OpenRecordset("テーブル1", dbOpenDynaset)
If ds.RecordCount <> 0 Then
   ds.MoveLast
   ds.AddNew
   ds.Update
End If
for n=0 to ds.felds.Count-1'フィールド数分繰り返す
ds.edit
ds!dat(n)="データ"
ds.Update
next n
ds.close
db.close
Set ds=nothing
Set db=nothing

>質問はここのパートのやり方について<<<<<===
>ds.Update
>ds.close
>db.close
>set ds=nothing
>set db=nothing
Updateは変更内容を確定するときに使う
closeは、setした内容が必要なくなったら使う
Set 変数=nothingは、
setしたことで確保されたメモリ領域をクリアを明示的に行うとき使う。

投稿時間:2004/12/01(Wed) 12:41
投稿者名:おじん
Eメール:
URL :
タイトル:
Re^2: mdbファイル(Access)の書きこみ
早速、ありがとうございました。

> >>デザインはどのようにしたらよいのでしょうか。
> コード(ソース)をどう書くかってことでしょうか?
Accessを使用してMDBを新規作成するとき「デザイン」のフォームで、
同じようなフィールドを数多く作りたい時、一つずつ定義しないで
簡単な方法があるかどうか、という意味でした。
そして、コードをどう書くか、という2つの質問でした。

> for文を使わない場合、
> SQL例
> INSERT INTO テーブル1 (対象フィールド1,対象フィールド2) VALUES (書き込みデータ1,書き込みデータ2)
フィールドの数が多いと、StrSQLの中が非常に長くなります(少なくとも256バイト以上です)。
これが心配でした(フィールド名が長いので、、、)。

> for文を使う場合
> If ds.RecordCount <> 0 Then
>    ds.MoveLast
>    ds.AddNew       <---------
>    ds.Update
> End If
> for n=0 to ds.felds.Count-1'フィールド数分繰り返す
> ds.edit
> ds!dat(n)="データ"
> ds.Update
> next n
MDBの更新(新規追加)は始めてで、手順は思考錯誤していました。
上記ソースの、ds.AdNewとds.Updateの間にテストで「1件だけ適当に」セットし
やってみたら新規に挿入されていましたので、それでよいのだと思っていました。
ただ問題なのは、このForを使用する場合、ds!dat(n)に相当するフィールド名datは
どうやって設定したらよいのかわかりません(これ、質問1の内容です)。

コツコツ、ガリガリ、やるしか方法はないようです。フィールド数が多いとは
言っても、25個ですから。
色々と、ありがとうございました。参考にし、また、思考錯誤してみます。

投稿時間:2004/12/01(Wed) 13:02
投稿者名:カムリン
Eメール:kakurin@hotmail.com
URL :
タイトル:
Re^3: mdbファイル(Access)の書きこみ
> ds!dat(n)="データ"
> ds!dat(n)に相当するフィールド名datは
すみません。間違ってました。
ds.felds(n)="データ"
でした。
これで、フィールド名が分からなくてもいけます。
"データ"の方も配列に格納しておけば、
ds.felds(n)=data(n)
ってな感じでいけると思います。

投稿時間:2004/12/01(Wed) 14:27
投稿者名:おじん
Eメール:
URL :
タイトル:
Re^4: mdbファイル(Access)の書きこみ
重ね重ね、ご丁寧にありがとうございます。ところで、
> for n=0 to ds.felds.Count-1'フィールド数分繰り返す
> ds.edit
> ds!dat(n)="データ"
> ds.Update
> next n
において、「n」の値は? 例えば、(ゼロオリジンで)、
1番目のフィールドはキー項目(データ)、
2番目以降が繰り返し項目(データ)で、最後のフィールドまでの場合、
for n=1 to ds.felds.count-1
とすればよいということでしょうか。当然、別途に
ds!no="キー項目"はセットします。

ところで、felds  ---> fields ?
まだテストしていないので、、、やってみればわかること。すぐやってみます。

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