Access VBA質問箱 IV

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

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


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

【5315】Re:ダブルクリックで、データ入力画面に移...
回答  小僧  - 05/6/7(火) 14:14 -

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

前回の質問から判断して「1.フォーム」がメインで「2.フォーム」はサブフォームでしょうか?

フォーム名に「.」が入るのは好ましくないので

「F_メイン」「F_サブ」として…

「山田」「佐藤」 などが入っているフィールドを「名前」フィールドと仮定します。

「F_サブ」に以下のコードでどうでしょうか?

(※要DAO参照設定)
Private Sub Form_DblClick(Cancel As Integer)
Dim MainRS As DAO.Recordset
Dim SubRS As DAO.Recordset
  Set MainRS = Forms![F_メイン].Recordset
  Set SubRS = Me.Recordset
    MainRS.FindFirst "[名前] = '" & Me.名前 & "'"
  Set SubRS = Nothing
  Set MainRS = Nothing
End Sub
・ツリー全体表示

【5314】ダブルクリックで、データ入力画面に移動
質問  サチチ  - 05/6/7(火) 11:56 -

引用なし
パスワード
   1.フォームで、1.山田 2.佐藤 3.鈴木 など1件ずつ入力できる様に
単票形式で作成し、
2.フォームで、一覧が分る様に、データシート型で作成したのですが、

2.フォームのレコードセレクタをダブルクリックすると、(1.山田さんをダブルクリック)
1.フォームの1.山田さんの入力画面が飛ぶ様にできますか?
同様に、2.佐藤さんをクリック→入力画面の2.佐藤さんに・・・

よろしくご教授願います。
・ツリー全体表示

【5313】Re:他テーブルの削除
お礼  hiyoko  - 05/6/7(火) 11:14 -

引用なし
パスワード
   ▼小僧 さん:
削除できました。ほんとうにありがとうございました。
アクセスは奥が深く難しいですが、1歩づつ進んでいきたいと思います。
・ツリー全体表示

【5312】Re:他テーブルの削除
回答  小僧  - 05/6/7(火) 11:06 -

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

引数は文字型で指定されているので「"」で括ってあげる必要があります。

>DeleteTable (\\Qa-server\ハード評価チーム\データ分析\試作版\インポート用.mdb,テーブル1)

DeleteTable ("\\Qa-server\ハード評価チーム\データ分析\試作版\インポート用.mdb","テーブル1")
・ツリー全体表示

【5311】Re:他テーブルの削除
質問  hiyoko  - 05/6/7(火) 10:58 -

引用なし
パスワード
   ▼小僧 さん:
レスありがとうございました。
私がコピーしてきたコードはユーザー定義関数を
作成していてそれを呼び出して実行するように
なっていたんですね。
教えていただいたように
DeleteTable (\\Qa-server\ハード評価チーム\データ分析\試作版\インポート用.mdb,テーブル1) としたのですが、マクロを実行しようとすると
"指定した式の構文が不正です。たとえば値または識別しが前にないのに
カンマを指定しています。"とエラーメッセージが出てきます。
〈〉をつけたりいろいろやってみたのですが、実行できません。よろしく
お願いいたします。
・ツリー全体表示

【5310】Re:他テーブルの削除
回答  小僧  - 05/6/7(火) 10:28 -

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

コードをモジュールに書いているのであれば、

式ビルダを起動 → [mdb名] → [モジュール名]

で関数が表示されます。「DeleteTable」を選択すると

DeleteTable (<<DbName>>, <<tblName>>)

と表示されますので(MDBのフルパス、テーブル名)を指定して実行できます。

" t_sarvice " → "t_sarvice"(前後のスペースが不要です)
と変更すれば引数をつけずに呼び出すと、

MDB   :\\Qa-server\ハード評価チーム\データ分析\試作版\インポート用.mdb
テーブル:t_sarvice

が削除されます。

※削除の処理となるので、意図しないテーブルが消されてしまう可能性があります。
必ずバックアップを取ってから実行してください。
・ツリー全体表示

【5309】他テーブルの削除
質問  hiyoko  - 05/6/7(火) 10:02 -

引用なし
パスワード
   アクセス初心者です。他データベースのテーブルを削除しようといろいろ検索しコードをコピーしてきました。これをマクロのプロシージャの実行の式ビルダから呼び出したいのですが、出てきません。どう直せばいいのかご教授ください。

'【引数説明】
'DbName   :データベース名のフルパス  \\Qa-server\ハード評価チーム\データ分析\試作版\インポート用.mdb
'tblName  :削除したいテーブル名  t_sarvice

Public Function DeleteTable(Optional DbName As String = "\\Qa-server\ハード評価チーム\データ分析\試作版\インポート用.mdb ", _
              Optional tblName As String = " t_sarvice ")

  'エラートラップ
  On Error GoTo DeleteTable_Err:

  '変数宣言
  Dim DB   As DAO.Database '接続先データベース
  Dim Tbl  As DAO.TableDef 'テーブルオブジェクト
  Dim strSQL As String    'SQL文用文字列

  'データベース接続
  If DbName = "" Then
    'データベース名が空白の場合はCurrentDbを指定
    Set DB = CurrentDb
  Else
    '指定MDBを開く
    Set DB = OpenDatabase(DbName)
  End If

  'テーブル削除
  If tblName = "" Then
    'テーブル名が空白の場合は全削除
    For Each Tbl In DB.TableDefs
      'システムテーブルの除外
      If Left(Tbl.Name, 4) <> "MSys" Then
        strSQL = "Drop Table " & Tbl.Name & ";"
        DB.Execute strSQL
      End If
    Next
  Else
    '指定テーブルを削除
    strSQL = "Drop Table " & tblName & ";"
    DB.Execute strSQL
  End If


  '終了処理
  DB.Close

Resume_Point:
  Set Tbl = Nothing
  Set DB = Nothing
  Exit Function

DeleteTable_Err:
  MsgBox Err.Number & vbCrLf & Err.Description
  GoTo Resume_Point:
End Function

'実行プロシージャ
Private Sub DeleteTest()
  Call DeleteTable(, "テーブル1")
End Sub
・ツリー全体表示

【5308】Re:最適なクエリの組み方は
回答  小僧  - 05/6/7(火) 9:27 -

引用なし
パスワード
   ▼にしもり さん:
おはようございます。
昨日のSQLの訂正版です。
SQLビューに貼り付けて確かめてください。

SELECT Q.科目大コード, Format([Q].[科目小コード],"00") AS 科目小コード, Q.金額
FROM [
SELECT テーブルA.*
FROM テーブルA
UNION ALL SELECT テーブルA.科目大コード,
Format(DMax("科目小コード","テーブルA","科目大コード = " & テーブルA.科目大コード)+1,"00") AS 式1,
Sum(IIf(テーブルA.科目小コード=0,テーブルA.金額,-テーブルA.金額)) AS 金額
FROM テーブルA
GROUP BY テーブルA.科目大コード,
Format(DMax("科目小コード","テーブルA","科目大コード = " & テーブルA.科目大コード)+1,"00")
]. AS Q
ORDER BY Q.科目大コード, Format([Q].[科目小コード],"00");
・ツリー全体表示

【5307】Re:VBAでクエリ
回答  小僧  - 05/6/7(火) 9:19 -

引用なし
パスワード
   ▼kuri さん、T さん:
おはようございます。

>#とANDの間に半角スペースを一個以上置きましょう

T さん、フォローありがとうございます。

以下、ヘルプに載っている「OpenForm」の例です。

>>次の例では、フォーム ビューで [社員] フォームを開き、
>>[氏名] フィールドが "山田 一郎" のレコードのみを表示します。
>>
>>DoCmd.OpenForm "社員", , ,"氏名 = '山田 一郎'"

上の例より、stSQLWhere に入る値は

"受付月日 between #2000/1/1# AND #2000/1/4#"

のようになれば良いかと思われます。
・ツリー全体表示

【5306】Re:VBAでクエリ
発言  T  - 05/6/7(火) 8:45 -

引用なし
パスワード
   ▼kuri さん:
>▼小僧 さん:
>>▼kuri さん、T さん:
>
>>とでもして、「stSQLWhere」にどんな値が入っているか確認してみましょう。
>>今のままですと kuri さんが望まれるような値が入っていないと思います。
>>
>>Private Sub コマンド28_Click()
>>Dim stSQLWhere As String
>>Dim stSQLWhere1 As String
>>
>>stSQLWhere = "T_001.受付月日 between[forms]![F_001]! #" & txt1 & "# AND[forms]![F_001]! #" & txt2 & "# "
>>
>>stSQLWhere1 = "T_001.受付月日 between #" & _
>>        [Forms]![F_001]![txt1] & "#AND #" & [Forms]![F_001]![txt2] & "# "
>>  Debug.Print stSQLWhere
>>  Debug.Print stSQLWhere1
>>
>>End Sub
>実行結果は
>1.T_001.受付月日 between[forms]![F_001]! #2000/1/1# AND[forms]![F_001]! #2000/1/3#

どうしてここに[forms]![F_001]!が入ってくるのでしょうか?

>2.T_001.受付月日 between #2000/1/1#AND #2000/1/3# となっていたのですが、

#とANDの間に半角スペースを一個以上置きましょう


>どこが悪いのやら・・・。1.番の方が正しいのですか?ちなみに、Openformすると、どちらも下記のようにtxt1,2に入れた抽出条件が、テーブルにあるレコード分だけ繰り返されて表示されます。う〜んわかりません。たすけて〜。
>
>txt1    txt2
>2000/1/1  2000/2/2
>2000/1/1  2000/2/2
>2000/1/1  2000/2/2
>2000/1/1  2000/2/2

SQL文の全景が分からないとなんともいえないです。
・ツリー全体表示

【5305】Re:ネット上のハイパーリンク先フォルダ内...
回答  たん  - 05/6/7(火) 8:37 -

引用なし
パスワード
   横から失礼。

理由のその1としてはCOBOLさんが言われるとおりです。
(殆どの場合はこれ。PC-Aでは、H:\AAAだが、PB-Bでは、J:\AAAのようになっている)
>私の経験上クライアントからファイルのアドレスを検索したときに、既にサーバーのドライブを指定しているケースがあります。
>これが引き金で他のクライアントでのドライブが異なる為にOpen出来ないことがありました。
>もう一度サーバーのアドレスが\\〜で始まっているかをチェックされたほうがいいかもです。

理由その2としては、PC-AのユーザIDのファイルへのアクセス権限と、PC-Bの同権限が
違うため、開けない。

どちらにしても、Access以前の問題です。
・ツリー全体表示

【5304】Re:VBAでクエリ
質問  kuri E-MAIL  - 05/6/6(月) 22:18 -

引用なし
パスワード
   ▼小僧 さん:
>▼kuri さん、T さん:

>とでもして、「stSQLWhere」にどんな値が入っているか確認してみましょう。
>今のままですと kuri さんが望まれるような値が入っていないと思います。
>
>Private Sub コマンド28_Click()
>Dim stSQLWhere As String
>Dim stSQLWhere1 As String
>
>stSQLWhere = "T_001.受付月日 between[forms]![F_001]! #" & txt1 & "# AND[forms]![F_001]! #" & txt2 & "# "
>
>stSQLWhere1 = "T_001.受付月日 between #" & _
>        [Forms]![F_001]![txt1] & "#AND #" & [Forms]![F_001]![txt2] & "# "
>  Debug.Print stSQLWhere
>  Debug.Print stSQLWhere1
>
>End Sub
実行結果は
1.T_001.受付月日 between[forms]![F_001]! #2000/1/1# AND[forms]![F_001]! #2000/1/3#
2.T_001.受付月日 between #2000/1/1#AND #2000/1/3# となっていたのですが、
どこが悪いのやら・・・。1.番の方が正しいのですか?ちなみに、Openformすると、どちらも下記のようにtxt1,2に入れた抽出条件が、テーブルにあるレコード分だけ繰り返されて表示されます。う〜んわかりません。たすけて〜。

txt1    txt2
2000/1/1  2000/2/2
2000/1/1  2000/2/2
2000/1/1  2000/2/2
2000/1/1  2000/2/2
・ツリー全体表示

【5303】Re:最適なクエリの組み方は
お礼  にしもり  - 05/6/6(月) 18:27 -

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

>下記のSQLをクエリに貼り付けて結果を確かめてください。
ユニオンクエリは私には難しいですが使わせていただきます。
どうもありがとうございました。
・ツリー全体表示

【5302】Re:最適なクエリの組み方は
回答  小僧  - 05/6/6(月) 18:07 -

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

テーブルAに
科目大コード 科目小コード 金額
  80      00     10000
  70      00     15000
  80      01      4000
  80      02      7000
  70      01      3000

のように全てデータが入っていたとして、
下記のSQLをクエリに貼り付けて結果を確かめてください。

SELECT テーブルA.*
FROM テーブルA
UNION ALL SELECT テーブルA.科目大コード,
Format(DMax("科目小コード","テーブルA","科目大コード = " & テーブルA.科目大コード)+1,"00") AS 式1,
Sum(IIf([科目小コード]=0,テーブルA.金額,-テーブルA.金額)) AS 金額
FROM テーブルA
GROUP BY テーブルA.科目大コード,
Format(DMax("科目小コード","テーブルA","科目大コード = " & テーブルA.科目大コード)+1,"00")
ORDER BY テーブルA.科目大コード;

結果の科目小コードがうまく数値型になっていませんが
ちょっと用事がありますので、取り急ぎ投稿しました。
うまくいくようなSQLが組めましたらまた投稿させて頂きます。
・ツリー全体表示

【5301】Re:VBAでクエリ
発言  小僧  - 05/6/6(月) 17:41 -

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

>>DoCmd.OpenForm "F_002", acFormDS, "", stSQLWhere

OpenForm する前に

Debug.Print stSQLWhere

とでもして、「stSQLWhere」にどんな値が入っているか確認してみましょう。
今のままですと kuri さんが望まれるような値が入っていないと思います。

>できることなら日付型をテキスト型に変換してしまいましょう。
>そのほうが範囲指定もやりやすいと思います。

うーん、日付型の方がBetween使いやすくないでしょうか?

Private Sub コマンド28_Click()
Dim stSQLWhere As String
Dim stSQLWhere1 As String

stSQLWhere = "T_001.受付月日 between[forms]![F_001]! #" & txt1 & "# AND[forms]![F_001]! #" & txt2 & "# "

stSQLWhere1 = "T_001.受付月日 between #" & _
        [Forms]![F_001]![txt1] & "#AND #" & [Forms]![F_001]![txt2] & "# "
  Debug.Print stSQLWhere
  Debug.Print stSQLWhere1

End Sub
・ツリー全体表示

【5300】Re:VBAでクエリ
発言  T  - 05/6/6(月) 17:34 -

引用なし
パスワード
   ▼kuri さん:
>>できることなら日付型をテキスト型に変換してしまいましょう。
>>そのほうが範囲指定もやりやすいと思います。
>
>変換するのは、テーブルの方ですか?それともコードの##をとるということですか?

テーブルを変換できるのであれば、それがベストだと思います。
変換したらそのテーブルを使っている所を全て見直さなければいけませんが・・・
・ツリー全体表示

【5299】Re:VBAでクエリ
質問  kuri E-MAIL  - 05/6/6(月) 17:31 -

引用なし
パスワード
   >できることなら日付型をテキスト型に変換してしまいましょう。
>そのほうが範囲指定もやりやすいと思います。

変換するのは、テーブルの方ですか?それともコードの##をとるということですか?
・ツリー全体表示

【5298】Re:VBAでクエリ
発言  T  - 05/6/6(月) 17:28 -

引用なし
パスワード
   ▼kuri さん:
>▼T さん:
>>▼kuri さん:
>>>根本的にわからないことは、ある抽出条件でクエリを実行するときのコードがわかりません。今まで日付で抽出するときは、クエリのデザインビューで、直接、抽出条件に
>>>Betwee Forms![F_000]![txt1]And Forms![F_000]![txt2]
>>>Betwee Forms![F_000]![txt1]And Forms![F_000]![txt2]IsNull
>>>といった感じで入力してたので、いざVBAでコードしようとしても全くわかりません。
>>
>>クエリのデザインビューをSQLビューに変えるとヒントになるかもしれません。
>SQLで見たのですが、
>
>WHERE (((T_001.受付月日) Between forms!F_001!txt1 And forms!F_001!txt2)) Or (((T_001.受付月日) Between forms!F_001!txt1 And forms!F_001!txt2 Is Null));
>このWHERE以降に書かれている事を参考に下記の用にコードしてみましたが、上手くいきませんでした。どこが悪いのか検討がつきません。
>
>Private Sub コマンド28_Click()
>Dim stSQLWhere As String
>
>stSQLWhere = "T_001.受付月日 between[forms]![F_001]! #" & txt1 & "# AND[forms]![F_001]! #" & txt2 & "# "
>
>DoCmd.OpenForm "F_002", acFormDS, "", stSQLWhere
>
>End Sub

できることなら日付型をテキスト型に変換してしまいましょう。
そのほうが範囲指定もやりやすいと思います。
・ツリー全体表示

【5297】Re:最適なクエリの組み方は
質問  にしもり  - 05/6/6(月) 17:27 -

引用なし
パスワード
   ▼小僧 さん:
こんにちは。
>  70,00,10000とかの値が入ることはありえないのでしょうか?
>  あった場合は「70」、「80」毎に集計?
ありえます。
そして「70」「80」・・ごとに処理します。
(合計ではありません。10000-5000-3000=2000のように処理します。)

>  わざわざテーブルに代入しなくても出来そうな気がするのですが…。
わたしは「70」「80」ごとに処理し、それを元のテーブルに追加しています。
そのやりかたがどうもダサイなあと思うので、もっと洗練されたやりかたがないものか知りたいと思っております。いい案がありましたらぜひご教示ください。
・ツリー全体表示

【5296】Re:VBAでクエリ
質問  kuri E-MAIL  - 05/6/6(月) 17:22 -

引用なし
パスワード
   ▼T さん:
>▼kuri さん:
>>根本的にわからないことは、ある抽出条件でクエリを実行するときのコードがわかりません。今まで日付で抽出するときは、クエリのデザインビューで、直接、抽出条件に
>>Betwee Forms![F_000]![txt1]And Forms![F_000]![txt2]
>>Betwee Forms![F_000]![txt1]And Forms![F_000]![txt2]IsNull
>>といった感じで入力してたので、いざVBAでコードしようとしても全くわかりません。
>
>クエリのデザインビューをSQLビューに変えるとヒントになるかもしれません。
SQLで見たのですが、

WHERE (((T_001.受付月日) Between forms!F_001!txt1 And forms!F_001!txt2)) Or (((T_001.受付月日) Between forms!F_001!txt1 And forms!F_001!txt2 Is Null));
このWHERE以降に書かれている事を参考に下記の用にコードしてみましたが、上手くいきませんでした。どこが悪いのか検討がつきません。

Private Sub コマンド28_Click()
Dim stSQLWhere As String

stSQLWhere = "T_001.受付月日 between[forms]![F_001]! #" & txt1 & "# AND[forms]![F_001]! #" & txt2 & "# "

DoCmd.OpenForm "F_002", acFormDS, "", stSQLWhere

End Sub
・ツリー全体表示

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