Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


403 / 500 ページ ←次へ | 前へ→

【5134】Re:リンク先がない場合の対応
回答  小僧  - 05/5/27(金) 10:44 -

引用なし
パスワード
   ▼nemotake さん:
こんにちは。
以下がヒントになりますでしょうか?

'※要 「Microsoft DAO x.x Object Library」 参照

Sub 他のDBのテーブル参照()
Dim MFile As String
Dim RS As DAO.Recordset
Dim SQLCode As String

  MFile = "D:\顧客データ\" & 設定年 & ".mdb"
  SQLCode = "SELECT NAME " _
      & "FROM MSysObjects " _
      & "IN '" & MFile & "' " _
      & "WHERE (((MSysObjects.Type)=1) AND ((MSysObjects.Flags)=0));"
  
  Set RS = CurrentDb.OpenRecordset(SQLCode)
    Do Until RS.EOF
      Debug.Print RS(0)
      RS.MoveNext
    Loop
    RS.Close
  Set RS = Nothing
End Sub

他にはエラートラップでも対応できると思われます。
・ツリー全体表示

【5133】リンク先がない場合の対応
質問  nemotake  - 05/5/27(金) 10:13 -

引用なし
パスワード
   If INRs!月1 = True Then
  設定年A 設定年 * 100 + 1
  名前 = "D:\顧客データ\" & 設定年 & ".mdb"
  DoCmd.TransferDatabase acLink, "MICROSOFT ACCESS" ,名前,acTable,"顧客テーブル",顧客テーブル"
  Docmd.OpenQuery "顧客抽出"
  Docmd.DeleteObJect acTable,"顧客テーブル"
End If

と上記の処理した場合、リンク先がなかったらエラーで処理がとまってしまいます。
リンク先がなかった場合、エラーにならない方法ってあるんですか?
大変申し訳ないのですが、記述の方法を教えてください。
よろしくお願いします。
・ツリー全体表示

【5132】Re:検索結果をフォームで更新したい
回答  Gin_II  - 05/5/27(金) 7:13 -

引用なし
パスワード
   > いろいろ調べた結果、基本的にADOで取得したレコードセットはフォームで編集は
> できないと記述している著書を発見しました。

> [ACC2000] ADOレコードセットに基づくフォームが読取専用になる
> http://support.microsoft.com/default.aspx?scid=kb;ja;227053

そのことを提示したつもりだったのですが。。。


> DAOコードで検索するようにヘルプなど参考にしながらやってみたのですが、
> 検索結果が該当データなしになっちゃいました^^;
> SQLの部分(select 〜)の書き方は、ADOと同じですよね?
> あと、レコードセットもうまくセットできませんでした。

Like 演算子の記号以外は、同じ記述で大丈夫だと思います。(大抵は)
% → *
に変更してください。
・ツリー全体表示

【5131】Re:検索結果をフォームで更新したい
質問  orange  - 05/5/27(金) 0:00 -

引用なし
パスワード
   こんばんわ。

早速、参照設定を確認しました。
DAOのコード使えるようになりました。
ありがとうございます。

DAOコードで検索するようにヘルプなど参考にしながらやってみたのですが、
検索結果が該当データなしになっちゃいました^^;
SQLの部分(select 〜)の書き方は、ADOと同じですよね?
あと、レコードセットもうまくセットできませんでした。

ADOの結果のレコードセットはやはり編集できないのでしょうか?
その辺も教えてください。
よろしくお願いします。
・ツリー全体表示

【5130】Re:フォームの作成の途中で
お礼  ふじじ  - 05/5/26(木) 17:17 -

引用なし
パスワード
   ▼小僧 さん:

>フォームのプロパティにある「レコードソース」

分りました!ありがとうございます!
・ツリー全体表示

【5129】Re:フォーム上でSQLを流す
回答  クロ  - 05/5/26(木) 16:43 -

引用なし
パスワード
   一度そのSQLでフォーム(データシートビューなど)を作成して
SELECTではじまるSQL文ならそのフォームを開く時にSQL文を
レコードソースとして代入してあげればいいのでは?
・ツリー全体表示

【5128】Re:フォームの作成の途中で
回答  小僧  - 05/5/26(木) 16:38 -

引用なし
パスワード
   ▼ふじじ さん:
こんにちは。

フォームのプロパティにある「レコードソース」の値は
新しく設定をしたテーブル・クエリになっていますか?

なっていれば、新しくテキストボックスをつくり、
コントロールソースの▼ボタンを押すと追加・変更した
フィールド名がでてくると思います。
・ツリー全体表示

【5127】Re:検索結果をフォームで更新したい
発言  小僧  - 05/5/26(木) 16:29 -

引用なし
パスワード
   ▼orange さん:
こんにちは。

>ACCESS2000ではDAOのコードは使えないようなので、模索中です。

当方、手元にAc2000が無いため、間違っていたらすみません。

参照設定の 「Microsoft DAO x.x Object Library」 にチェックを入れれば
DAOを使えると思います。(DAOが参照設定になかったらすみません。)

参照設定の優先順位を気にする必要がでてきますが…。
・ツリー全体表示

【5126】Re:フォーム上でSQLを流す
質問  ぶる  - 05/5/26(木) 15:55 -

引用なし
パスワード
   SELECT結果を表示できました。ただ、扱うレコード数が
数千件単位だったりフィールド数が10〜20あるので
リストボックスですとやはりキツイです(><)
なのでやはり別ウィンドウなどに表示できる方法はないでしょうか?
すみません(TT)
・ツリー全体表示

【5125】フォームの作成の途中で
質問  ふじじ  - 05/5/26(木) 15:33 -

引用なし
パスワード
   フォームの作成中、追加する物が出てしまい、
テーブル・クエリに必要なものを追加し、以前あったものの
名前を変更し、さて、フォームにて、追加!と思ったら、
出来ないのです・・・(泣)

フィールドリストを出しても、以前のまま・・・。
どうしたら、新しく作成した、クエリから、ボックスを
もってこれるのですかーーーー!!

例)作業 → 作業1 に変更
     → 内容1(追加)
というった感じで10個ほど、テーブルと、クエリに追加です。
・ツリー全体表示

【5124】Re:フォーム上でSQLを流す
回答  小僧  - 05/5/26(木) 15:23 -

引用なし
パスワード
   ▼ぶる さん:
こんにちは。

>RowSourceを使ったことがないのですが
>それを使うとSELECT文でも実行できるのですか??

リストボックスの値集合ソースにはSQL文が記述出来るようになっています。
SELECT文を実行できる…というよりは、値集合ソースを書き換えると言う方が
近いイメージでしょうか?

フォーム上に結果リスト(リストボックス)を追加して

Private Sub cmdStrt_Click()

If IsNull(Me.Txtsql) Then
  MsgBox "処理内容が記述されていません。"
End If

'テキストボックスに入力されているSQLを実行
  Me.結果リスト.RowSource = Me.Txtsql
  Me.結果リスト.Requery
End Sub

リストボックスの列数をSELECTしたフィールド数に合わせれば
結果が表示されると思います。
・ツリー全体表示

【5123】Re:検索結果をフォームで更新したい
質問  orange  - 05/5/26(木) 15:15 -

引用なし
パスワード
   【5110】のレコードセット取得はなんとか解決しました。
お調べくださっている方申し訳ありませんでした。

いろいろ調べた結果、基本的にADOで取得したレコードセットはフォームで編集は
できないと記述している著書を発見しました。
編集したい場合は、CursorLocationプロパティの値をadUseClientに設定すると記述されてあったので、試したのですが
やはり、検索結果は表示されてもそのままフォーム上で編集しようとすると
「このレコードセットは編集できません」となってしまいます。

ACCESS2000ではDAOのコードは使えないようなので、模索中です。

お気づきの点、アドバイスなどよろしくお願いします。m(__)m
・ツリー全体表示

【5122】Re:フォーム上でSQLを流す
質問  ぶる  - 05/5/26(木) 15:11 -

引用なし
パスワード
   ▼小僧 さん:
>▼ ぶる さん、クロ さん:
>こんにちは。
>
>フォーム上にリストボックスを作成して、コマンドボタンを実行すると
>リストボックスの RowSource にSQLのコードが指定されるようにしてみては
>いかがでしょうか?

RowSourceを使ったことがないのですが
それを使うとSELECT文でも実行できるのですか??
・ツリー全体表示

【5121】Re:クエリで生年月日から、年齢の出し方
お礼  サチチ  - 05/5/26(木) 14:48 -

引用なし
パスワード
   ▼クロ さん:

ありがとうございます。エクセルと違い、奥が深い・・・。
作成してみます。大変、参考になります。
・ツリー全体表示

【5120】Re:フォーム上でSQLを流す
回答  小僧  - 05/5/26(木) 14:44 -

引用なし
パスワード
   ▼ ぶる さん、クロ さん:
こんにちは。

フォーム上にリストボックスを作成して、コマンドボタンを実行すると
リストボックスの RowSource にSQLのコードが指定されるようにしてみては
いかがでしょうか?
・ツリー全体表示

【5119】Re:続 フォーム作成
回答  小僧  - 05/5/26(木) 14:32 -

引用なし
パスワード
   ▼バリュー さん:
こんにちは。

T_千葉ロッテ
背番号 名前    ポジション
 1  小坂 誠   内野手
 2  バレンタイン 監督
 9  福浦 和也  内野手
14  小宮山 悟  投手
18  清水 直行  投手
30  小林 雅英  投手

こんなテーブルがあったとします。
(主キー:背番号)

1.非連結フォームの例

F_非連結(フォーム)
  背番号コンボ:コンボボックス
         値集合タイプ:テーブル/クエリ
         値集合ソース:SELECT T_千葉ロッテ.背番号 FROM T_千葉ロッテ;

  名前ボックス:テキストボックス

  ポジションボックス:テキストボックス

  以上、フォーム上に3つのコントロールを配置します。

  背番号コンボの更新後処理の右にある「...」をクリックして、
  「コードビルダ」を選択してクリック。

Private Sub 背番号コンボ_AfterUpdate()
  Me.名前ボックス = DLookup _
       ("名前", "T_千葉ロッテ", "背番号 = " & Me.背番号コンボ.value)
  Me.ポジションボックス = DLookup _
       ("ポジション", "T_千葉ロッテ", "背番号 = " & Me.背番号コンボ.value)
  
End Sub

 これでフォームに名前と背番号が表示されると思います。
 フォーム「F_非連結」とテーブル「T_千葉ロッテ」は連結されていないため、
 修正を加えた時にテーブルに書き込む処理を加えます。
 まぁ、改名はあまり行わないとして、ポジションが変わったときの例です。

 上記と同じように操作してポジションボックスの更新後処理に

Private Sub ポジションボックス_AfterUpdate()
  Dim SQLCode As String
  SQLCode = "UPDATE T_千葉ロッテ " _
      & "SET ポジション = '" & Me.ポジションボックス.value _
      & "' WHERE 背番号 = " & Me.背番号コンボ.value

  DoCmd.RunSQL SQLCode
End Sub

 これでポジションが修正されると思います。


2.連結フォームの例
フォームの「新規作成」⇒「オートフォーム単票形式」で
基になるテーブルまたはクエリの選択に「T_千葉ロッテ」を選択。

作成されたフォームをデザインビューで開きなおし、
検索コンボ:コンボボックス
         値集合タイプ:テーブル/クエリ
         値集合ソース:SELECT T_千葉ロッテ.背番号 FROM T_千葉ロッテ;

を追加。(フォームヘッダに配置するとそれらしくなります。)

現在はレコードセレクタによって全ての選手が参照できてしまうので、
検索コンボの値によってフィルタを掛けて絞り込みます。

上記と同じように検索コンボの更新後処理に

Private Sub 検索コンボ_AfterUpdate()
  Me.Filter = "背番号 = " & Me.検索コンボ
  Me.FilterOn = True
End Sub

これで絞り込まれたはずです。
今回は連結フォームなので、フォームに修正を加えるとそのままテーブルに反映されます。

>
>ACCESSがどんな言語からできているのか?
>VBもしくはVBAからできているのか?
>その点からわからず、
>参考書を見てそこに書いてある作業をしたら
>自分が行いたい動きをする開発になるのか?、、
>不確かながらも手探りで進めている状況です。

ACCESSでDB更新等を行う場合、VBAで処理を行うか
ACCESSの機能にある「マクロ」で処理を行うかになります。
この掲示板は「VBA質問箱」ということでマクロ処理は割愛させて頂きましたが、
「コードビルダ」でなく「マクロビルダ」を使用してマクロでも同じ事ができるかも
(すいません、確かめていないです…)です。
・ツリー全体表示

【5118】Re:クエリで生年月日から、年齢の出し方
回答  クロ  - 05/5/26(木) 14:22 -

引用なし
パスワード
   http://support.microsoft.com/default.aspx?scid=kb;ja;404910
こちらが参考になりませんか?
・ツリー全体表示

【5117】Re:フォーム上でSQLを流す
回答  クロ  - 05/5/26(木) 14:13 -

引用なし
パスワード
   QueryDefでSQL文から一時的にクエリを作って
OpenQueryで開くとか?
・ツリー全体表示

【5116】Re:フォーム上でSQLを流す
発言  ぶる  - 05/5/26(木) 14:03 -

引用なし
パスワード
   ▼クロ さん:
>RunSQLではアクションクエリ(SQL)しか走りません。
>SELECTのような選択クエリ(SQL)はRun出来ないですよ。

そうだったんですか(><)
他の方法でもSELECT文を流して表示させるという事は出来ないのでしょうか?
・ツリー全体表示

【5115】Re:フォーム上でSQLを流す
回答  クロ  - 05/5/26(木) 13:55 -

引用なし
パスワード
   RunSQLではアクションクエリ(SQL)しか走りません。
SELECTのような選択クエリ(SQL)はRun出来ないですよ。
・ツリー全体表示

403 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1084741
(SS)C-BOARD v3.8 is Free