Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

新着の投稿記事


タイトル実行時エラー'3034' について
記事No171833   [関連記事]
投稿日: 2017/05/18(Thu) 18:36
投稿者バジル
OS:windows10
Access Version:2007

またお世話になります。
よろしくお願いします。

1つのフォームに2つのサブフォームを作り、
右のサブフォームのデータを「更新」したら、左のサブフォームを
「再計算」させて数値を変えるようにしました。
1回目の「更新」はうまくいくのですが、もう一度「更新」をすると
「 実行時エラー'3034' コミットまたはロールバックを実行するには、
BeginTrans メソッドを使用してください 」と出てきます。

ネットでいろいろ調べながら見よう見まねで作成しているので、
エラーが出ると、どこが悪いのか判断できません。
誠に申し訳ありませんが、ご教授願います。


「更新」「破棄」については、
下記のようにコマンドボタンを作りました。
-----------------------------------------------------------
'フォームモジュールレベル変数の定義
Option Compare Database
Option Explicit

Dim db As DAO.Database
Dim rs As DAO.Recordset

'コマンドボタン cmd_Commit のクリック時のイベントプロシージャ
Private Sub cmd_Commit_Click()
DAO.CommitTrans
MsgBox "更新を保存しました。"
DoCmd.Close acForm, Me.Name
End Sub

'コマンドボタン cmd_Rollback のクリック時のイベントプロシージャ
Private Sub cmd_Rollback_Click()
DAO.Rollback
MsgBox "更新を破棄しました。"
DoCmd.Close acForm, Me.Name
End Sub

タイトルRe^3: コンボボックスに「すべて選択」を設定することはできたのですが、「パラメーターの入力」が出てしまいます
記事No171832   [関連記事]
投稿日: 2017/05/18(Thu) 18:24
投稿者バジル
解決済: ON
> hatena 様
>
> 解決しました。
> ご丁寧な回答、ありがとうございました!!!!!
> 2日ほど悩んでいたので、本当に助かりました。
>
> まだまだ作成中なので、今後ともよろしくお願いします。

タイトルRe^4: クエリで重複するフィールドを基準にまとめたい
記事No171831   [関連記事]
投稿日: 2017/05/17(Wed) 18:30
投稿者ロン
解決済: ON
tkwan様、お返事遅くなり、すみません。

質問致しました2パターンだけでなく、おまけまで頂き恐縮です。

教えて頂いたのを基に試したところ、無事、希望通りの結果が得られました。

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

タイトルRe^2: コンボボックスに「すべて選択」を設定することはできたのですが、「パラメーターの入力」が出てしまいます
記事No171830   [関連記事]
投稿日: 2017/05/16(Tue) 18:33
投稿者バジル
解決済: ON
hatena 様

解決しました。
ご丁寧な回答、ありがとうございました!!!!!
2日ほど悩んでいたので、本当に助かりました。

まだまだ作成中なので、今後ともよろしくお願いします。

タイトルRe^3: クエリで重複するフィールドを基準にまとめたい
記事No171829   [関連記事]
投稿日: 2017/05/16(Tue) 10:40
投稿者tkwan
解決済: ON
おまけ。

もし、受注番号の数が3個以上になった場合、
ケース2のSQLをその都度書き直すのは面倒でしょうから、


 Dim db     As DAO.Database
 Dim rs     As DAO.Recordset
 Dim QDef   As DAO.QueryDef
 Dim i      As Integer
 Dim strSQL As String

 Set db = CurrentDb

  Set rs = db.OpenRecordset("SELECT MAX(F) AS FMax" & _
                            "  FROM (SELECT Count(*) AS F" & _
                            "          FROM テーブル名" & _
                            "         GROUP BY 社名)")
  For i = 1 To rs!FMax
    strSQL = strSQL & ", GetOrder2(社名," & i & ") AS 受注番号" & i
   Next
 
  strSQL = "SELECT DISTINCT 社名" & strSQL & _
           "  FROM テーブル名;"

  Set QDef = db.QueryDefs("2で作ったクエリの名前")

  QDef.SQL = strSQL

  DoCmd.OpenQuery (QDef.Name)
  
  QDef.Close: Set QDef = Nothing
  rs.Close:   Set rs = Nothing
  db.Close:   Set db = Nothing

を実行すれば自動的にクエリを書き直して開くことができます。

タイトルRe: コンボボックスに「すべて選択」を設定することはできたのですが、「パラメーターの入力」が出てしまいます
記事No171828   [関連記事]
投稿日: 2017/05/14(Sun) 22:56
投稿者hatena
解決済: ON
参考にした方法は非常に難解ですよね。私でもさっぱり分かりません。

下記で紹介している方法の方がはるかにシンプルで分かりやすいと思います。

コンボボックス(リストボックス)のリストに"(すべて)"を追加する - hatena chips
http://hatenachips.blog34.fc2.com/blog-entry-248.html


フォームヘッダーの「農薬選択コンボ」の設定

値集合タイプ テーブル/クエリ
連結列 1
値集合ソース
SELECT 0 AS 農薬ID, "(すべて)" AS 品名
FROM MT_農薬台帳
UNION
SELECT 農薬ID, 品名
FROM MT_農薬台帳
ORDER BY 1;

列数 2
列幅 0cm


'「農薬選択コンボ」の更新後処理
Private Sub 農薬選択コンボ_AfterUpdate()
    If Me.農薬選択コンボ = 0 Then
        Me.Filter = ""
        Me.FilterOn = False
    Else
        Me.Filter = "農薬ID=" & Me.農薬選択コンボ '※
        Me.FilterOn = True
    End If
End Sub


「農薬ID」フィールドがテキスト型なら、※の行を下記に変更してください。

Me.Filter = "農薬ID='" & Me.農薬選択コンボ & "'"

タイトルRe^2: クエリで重複するフィールドを基準にまとめたい
記事No171827   [関連記事]
投稿日: 2017/05/14(Sun) 22:28
投稿者tkwan
解決済: ON
では、2の方法

標準モジュールに

Function GetOrder2(strName As String, intOrder As Integer) As Variant

 Dim db     As DAO.Database
 Dim rs     As DAO.Recordset
 Dim strSQL As String

 strSQL = "Select Top 1 受注番号 From " & _
          "(Select Top " & intOrder & " 受注番号 From テーブル名" & _
          "  Where 社名 = '" & strName & "' Order By 受注番号)" & _
          "  Order By 受注番号 Desc;"
          
 Set db = CurrentDb
 Set rs = db.OpenRecordset(strSQL)

 GetOrder2 = rs!受注番号
  
 If DCount("受注番号", "テーブル名", "社名='" & strName & "'") < intOrder Then
    GetOrder2 = Null
  End If

End Function

を組んでおいて、

クエリ
SELECT DISTINCT 社名
       , GetOrder2(社名,1) AS 受注番号1
       , GetOrder2(社名,2) AS 受注番号2
       , GetOrder2(社名,3) AS 受注番号3
  FROM テーブル名;

タイトルRe: クエリで重複するフィールドを基準にまとめたい
記事No171826   [関連記事]
投稿日: 2017/05/14(Sun) 19:48
投稿者tkwan
解決済: ON
まず、1の方法

標準モジュールに

Function GetOrder(strName As String) As String

  Dim db     As DAO.Database
  Dim rs     As DAO.Recordset
  Dim strSQL As String

  strSQL = "Select 受注番号 From テーブル名 Where 社名 = '" & _
            strName & "' Order By 受注番号;"

  Set db = CurrentDb
  Set rs = db.OpenRecordset(strSQL)

  Do Until rs.EOF
     GetOrder = GetOrder & rs!受注番号 & ","
     rs.MoveNext
   Loop
 
   GetOrder = Left$(GetOrder, Len(GetOrder) - 1)

 End Function 

を組んでおいて、

クエリ
 Select Distinct 社名, GetOrder(社名) As 受注番号
    From テーブル名;
    
※「テーブル名」は実際のテーブル名に置き換えること。

 

タイトルコンボボックスに「すべて選択」を設定することはできたのですが、「パラメーターの入力」が出てしまいます
記事No171825   [関連記事]
投稿日: 2017/05/14(Sun) 16:34
投稿者バジル
解決済: ON
OS:windows10
Access Version:2007

いつもお世話になっています。
今回もよろしくお願いします。

こちらにあるSampleFileにある「コンボボックスに”すべて”を表示:SampleFile030」を参考にコンボボックスを作成しました。
「すべて選択」はできるようになったのですが、それ以外のIDを選択すると「パラメーターの入力」画面が出てきてしまいます。
表示されているIDを入力すれば抽出はできるのですが、コンボボックスで選択のみで抽出できるようにしたいです。

下記のように設定したところ、「すべて選択」の項目は表示されて選択することはできるのですが、「農薬A」を選択すると「パラメーターの入力」画面がでて、表示されているコード(NY001)を入力すると「農薬A」の抽出ができる状態です。

サンプルと違うのは、抽出するフィールド(農薬ID)もコンボボックスとなっているところです。
いろいろと試しましたが、うまくいきません。
せっかくここまで頑張ったので諦めたくなく、お知恵を拝借できればと思っています。
よろしくお願します。

下記はどのように作成したかを書き出しました。
-----------------------------------------------

1)テーブルを作成
(フィールド名)
入出庫No
入出庫日
農薬ID(下記のようにコンボボックスを設定)
入庫数
出庫数

※「農薬ID」をルックアップウィザードでコンボボックスに設定。
(値集合ソース)
SELECT [MT_農薬台帳].[農薬ID], MT_農薬台帳.[品名] FROM MT_農薬台帳 ORDER BY [農薬ID];

2)そのまま表形式のフォームを作成

3)「SampleFile030」を参考にコンボボックス用のクエリを作成(Q_農薬リスト)

(SQLコード)
SELECT MT_農薬台帳.品名, MT_農薬台帳.農薬ID
FROM MT_農薬台帳
ORDER BY MT5S1_農薬台帳.農薬ID;

4)つづいてフォームヘッダーに「農薬選択コンボ」を作成して、
以降サンプルにのっとって作成しました。

タイトルクエリで重複するフィールドを基準にまとめたい
記事No171824   [関連記事]
投稿日: 2017/05/14(Sun) 13:48
投稿者ロン
解決済: ON
OS:Windows7
Access Version:2016

たびたびこちらで学習させていただいております。
VBAは未熟なのですが、よろしくお願いします。

社名が重複していて、受注番号は各レコード固有の以下のようなテーブルを、

社名 受注番号
A社 1
C社 6
A社 2
B社 4
B社 5
A社 3

クエリ上で、以下、1.、2.のようにまとめたいのですが、

1.
社名 受注番号
A社 1,2,3
B社 4,5
c社 6

2.
社名 受注番号1 受注番号2 受注番号3
A社    1    2     3
B社   4   5
C社   6

それぞれの処理の方法が解らないので、教えていただけないでしょうか。

タイトルbinary型のデーターをクエリーで表示する方法
記事No171823   [関連記事]
投稿日: 2017/05/13(Sat) 13:04
投稿者勝彦
解決済: ON
OS:WIN10
Access Version:2013
お世話になります。
sQLのデーターベースの中に binary型のデーターがあります。
そのデーターをクエリで表示させることが出来る方法を探してます。
一応試した内容は
式:STR([フィールド])
式:stringSTR([フィールド])
cstr(nz(フィールド名,"")) →・で表示されます
どちらも エラーで表示されません
どうやれば見れるようになりますか?

よろしくお願いします
解決しました
ASC(フィールド名)でした

タイトルRe^5: コンボボックスで抽出
記事No171822   [関連記事]
投稿日: 2017/05/11(Thu) 14:18
投稿者JS
解決済: ON
> ひょっとして、帳票フォームではなく、データシートビューですか。
> だとしたら、私の回答の方法は無理です。
> というか、データシートビューでコンボホックスのリストを制限するのは無理です。

データーシートです。
制限するのは無理なんですね…
すみませんでした、どうもありがとうございました。

> 帳票フォームに変更はできませんか。

仕事上で使うので変更はちょっと難しいのですが、
試しにサブフォームを帳票フォームに変更してやってみました。
やはりリストも過去入力分も空白になってしまいました。
私のやり方が間違っているのかもしれません…

私の説明不足でお手間をおかけして大変申し訳ありませんでした。
どうもありがとうございました!

タイトルRe^4: コンボボックスで抽出
記事No171821   [関連記事]
投稿日: 2017/05/10(Wed) 18:49
投稿者hatena
解決済: ON
> 現在使っているコンボボックスを削除し
> 教えていただいた通りに設定してみました。
> サブフォームの一覧列の後ろに「cb使用者_在籍」「cb使用者」の2列が追加されましたが
> コンボボックスのリストには何も表示されませんでした。
> また過去の使用者一覧も空欄になっています。

ひょっとして、帳票フォームではなく、データシートビューですか。
だとしたら、私の回答の方法は無理です。
というか、データシートビューでコンボホックスのリストを制限するのは無理です。

帳票フォームに変更はできませんか。

タイトルRe^3: コンボボックスで抽出
記事No171820   [関連記事]
投稿日: 2017/05/10(Wed) 17:02
投稿者JS
解決済: ON
hatena様

現在使っているコンボボックスを削除し
教えていただいた通りに設定してみました。
サブフォームの一覧列の後ろに「cb使用者_在籍」「cb使用者」の2列が追加されましたが
コンボボックスのリストには何も表示されませんでした。
また過去の使用者一覧も空欄になっています。

すみません、本当に独学の初心者なのでよくわかっていなくて申し訳ないのですが

使用していたコンボボックスの値集合ソースはクエリを使っていました。
そのうえで、
列数2、列幅0cm;2cm、連結列1となっています。
それが問題でしょうか?

タイトルRe^2: コンボボックスで抽出
記事No171819   [関連記事]
投稿日: 2017/05/10(Wed) 15:45
投稿者JS
解決済: ON
tkwan様

> > 過去に入力したものはそのまま表示しつつ、コンボボックスでは在籍者だけ表示することは可能でしょうか?
>
> コンボボックスの値集合ソースとサブフォームのレコードソースに、同じクエリを使っていませんか?

すみません、よく見たらサブフォームのレコードソースには違うクエリを使っていました。

ページの先頭へ 前ページへ戻る