Access VBA質問箱 IV

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

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


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

【7609】Re:レコード追加時の重複について
質問  水無月  - 06/3/29(水) 16:05 -

引用なし
パスワード
   たんさんへ。
またまたお返事ありがとうございます。
実は、自分でSQLを組んではいたのですが上手く動かないのです。
下記のどこが悪いのか教えて頂けませんか?

Private Sub cmd_TOROKU_Click()

  Dim cn As ADODB.Connection
  Dim rs As ADODB.Recordset
  Dim i As Long
  Dim mySQL As String
  Dim et As Integer

  Set cn = CurrentProject.Connection
  Set rs = New ADODB.Recordset
  rs.Open "T_TP", cn, adOpenKeyset, adLockOptimistic
  
  For i = CLng(Me!START) To CLng(Me!END)
  mySQL = "SELECT T_TP. TPNO FROM T_TP WHERE (T_TP.TPNO)='CStr(i)';"
  Next i
  
  et = rs.RecordCount
  
  If et = 0 Then
  
    For i = CLng(Me!START) To CLng(Me!END)
    
    If IsNull(Me!HEAD) Then
      rs.AddNew
        rs!TPNO = CStr(i)
        rs!BANGO= Me!BANGO
      rs.Update
    Else
      rs.AddNew
        rs!TPNO = Me!HEAD + CStr(i)
        rs!BANGO= Me!BANGO
      rs.Update
    End If
  
    Next i
  
    If IsNull(Me!HEAD) Then
      MsgBox ("No." & Me!START & "から" & Me!END & "まで登録しました")
    Else
      MsgBox ("No." & Me!HEAD + Me!START & "から"
            & Me!HEAD + Me!END & "まで登録しました")
    End If
    
  Else
    MsgBox "重複した試験片番号があります"
  End If
  
  rs.Close: Set rs = Nothing
  cn.Close: Set cn = Nothing
    
End Sub
・ツリー全体表示

【7608】Re:レコード追加時の重複について
回答  たん  - 06/3/29(水) 15:35 -

引用なし
パスワード
   >実は、SQLやFilterプロパティを使ってみようと思ったのですが、
>その抽出条件の書き方が分からないのです。

Accessなのだったら、クエリを生成し、SQLビューで表示させれば、
SQL文自体は作成可能でしょう。

ただ、ADOで制御するプログラムを組む必要があるのなら、
SQL文を手書きで組めるように、構文の記述法等を把握していない
のであれば、今後、同じ事で苦しむだけでしょう。

SQL文の例が必要なら、まずはクエリを作ってみることです。

その上で出来あがったものを元に、ヘルプでSQL文の基礎を覚える
べきでしょう。
当然、抽出条件の書き方は、非常に大事です。

分からないと言って、提示されたSQL文を見るのも一つの方法かも
しれませんが、それでは応用が利かなくなるだけです。

まずは、自身で、クエリを元にSQL文を作って、それをベースに
問い合わせるべきでしょう。
・ツリー全体表示

【7607】Re:レコード追加時の重複について
質問  水無月  - 06/3/29(水) 15:19 -

引用なし
パスワード
   申し訳ありません。今度から気をつけます。

返信ありがとうございます。

実は、SQLやFilterプロパティを使ってみようと思ったのですが、
その抽出条件の書き方が分からないのです。

お手数ですが教えてください。
・ツリー全体表示

【7606】Re:レコード追加時の重複について
回答  たん  - 06/3/29(水) 14:50 -

引用なし
パスワード
   # 発言の際は、投稿の内容欄の大きさに合わせて、適宜、
# 手動で改行を入れて下さい。(引用しにくいし、見にくいので)

>この次にA10000〜A10100までを登録しようとした場合、現在はテーブルのインデックスが重複なしになっているため、重複が出たときにエラーが出ます。でもA10000〜A10049まではノーチェックで登録されてしまいます。そうではなくて、登録しようとしたNOが1つでも重複している場合、1つも登録することなく元のフォームに戻り入力し直すようにしたいのです。

A10000〜A10100までを抽出条件にしたデータセットを開き、そのデータセットの
件数が0件なら処理を行ない、
0件でないなら、エラーメッセージ等を吐き出して、処理を行なわなければ良い。

以上。
・ツリー全体表示

【7605】Re:コンボボックスにデーターがない時全表...
発言  Gin_II  - 06/3/29(水) 14:38 -

引用なし
パスワード
   クエリのデザインビューで、「表示」→「SQLビュー」として、
表示される、SQL文をこちらに提示してもらえますか?
・ツリー全体表示

【7604】レコード追加時の重複について
質問  水無月  - 06/3/29(水) 14:31 -

引用なし
パスワード
   こんにちは、水無月と申します。
下記についてご教授宜しくお願いします。

フォームに「HEAD」「START」「END」「BANGO」というテキストボックスを設置して「TOUROKU」ボタンをクリックした際に「T_TP」というテーブルにレコードを追加するイベントを行います。
例えば、HEADに「A」、STARTに「10050」、ENDに「10100」、BANGOに「60」とするとA10050〜A10100までの連続番号のTPNOとその全レコードのBANGOに60が登録されます。
この次にA10000〜A10100までを登録しようとした場合、現在はテーブルのインデックスが重複なしになっているため、重複が出たときにエラーが出ます。でもA10000〜A10049まではノーチェックで登録されてしまいます。そうではなくて、登録しようとしたNOが1つでも重複している場合、1つも登録することなく元のフォームに戻り入力し直すようにしたいのです。
でもどうすればいいのか分からず困っています。どうか宜しくお願いします。
(ちなみにHEADはつく場合と空白の場合があります)

Private Sub cmd_TOROKU_Click()

  Dim cn As ADODB.Connection
  Dim rs As ADODB.Recordset
  Dim i As Long

  Set cn = CurrentProject.Connection
  Set rs = New ADODB.Recordset
  rs.Open "T_TP", cn, adOpenKeyset, adLockOptimistic
  
  For i = CLng(Me!START) To CLng(Me!END)
  
  If IsNull(Me!HEAD) Then
    rs.AddNew
      rs!TPNO = CStr(i)
      rs!BANGO = Me!BANGO
    rs.Update
  Else
    rs.AddNew
      rs!TPNO = Me!HEAD + CStr(i)
      rs!BANGO = Me!BANGO
    rs.Update
  End If
  
  Next i
  
  If IsNull(Me!HEAD) Then
    MsgBox ("No." & Me!START & "から" & Me!END & "まで登録しました")
  Else
    MsgBox ("No." & Me!HEAD + Me!START & "から" & Me!HEAD + Me!END & "まで登録しました")
  End If
  
  rs.Close: Set rs = Nothing
  cn.Close: Set cn = Nothing
    
End Sub
・ツリー全体表示

【7602】Re:コンボボックスにデーターがない時全表...
質問  かく  - 06/3/29(水) 14:30 -

引用なし
パスワード
   ▼Gin_II さん:
>>ここでもう1つ問題が発生したのですが、複数のコンボボックスで絞込みを行う為
>>この式を複数のフィールドに入力するとおかしな動きになってしまいました。
>
>どうなったのでしょうか? ^^;
>1つの条件欄でも、設定後、デザインビューで開きなおすと、内容がかわると
>思います。
>1回で、必要なフィールドの分、設定したらどうなりますか?
>(閉じたりビューを変更したりせずに。)

Gin_II さんいつもわかりにくい質問をして大変すみません。
確かに1つの条件欄に設定後、デザインビューで開きなおすと、内容がかわります。それを1度に複数のフィールドに入力すると各フィールドの抽出条件に複数の条件が入ります。
しかし1つのフィールドだけが抽出条件すべての欄に[Forms]![F_帳票]![メーカ]の記述が入り、そのほかのフィールドは[Forms]![F_帳票]![移動軸]のほかに空白やIs Null等が抽出条件に入っています。
大変、初心者的な質問で申し訳ございませんが宜しくお願いします。
・ツリー全体表示

【7601】Re:コンボボックスにデーターがない時全表...
回答  Gin_II  - 06/3/29(水) 13:51 -

引用なし
パスワード
   >ここでもう1つ問題が発生したのですが、複数のコンボボックスで絞込みを行う為
>この式を複数のフィールドに入力するとおかしな動きになってしまいました。

どうなったのでしょうか? ^^;
1つの条件欄でも、設定後、デザインビューで開きなおすと、内容がかわると
思います。
1回で、必要なフィールドの分、設定したらどうなりますか?
(閉じたりビューを変更したりせずに。)
・ツリー全体表示

【7600】Re:コンボボックスにデーターがない時全表...
質問  かく  - 06/3/29(水) 13:25 -

引用なし
パスワード
   ▼Gin_II さん:
>> コンボボックスで選択したデーターをクエリの抽出条件に
>> [Forms]![F_帳票]![メーカ]を記述して絞込みを行なっているのですが
>> 何も選択してない時は全表示にしたいのです。
>
>[Forms]![F_帳票]![メーカ] Or [Forms]![F_帳票]![メーカ] Is Null
>のように抽出条件を入れたらどうでしょうか?

Gin_IIさん早急な対応ありがとうございます。
おかげさまで思い通りの動きになり大変感動しました。
ここでもう1つ問題が発生したのですが、複数のコンボボックスで絞込みを行う為この式を複数のフィールドに入力するとおかしな動きになってしまいました。
大変シロウトな質問だと思いますが何かよい対策案を宜しくお願いいたします。
・ツリー全体表示

【7599】Re:手書き用請求書の金額欄位置合わせ
回答  Gin_II  - 06/3/29(水) 11:46 -

引用なし
パスワード
   >手書き用請求書の金額欄の位置合わせが上手くいきません。
>明朝体でフォントサイズ12に設定していますが、

固定幅フォントを使っていますか?
(Pなしのフォント。MS 明朝 とか)


>文字の配置を標準にすると文字間隔が詰まりすぎになります。
>均等割付にすると金額の桁数によって誤差が生じます。
>数字と数字のピッチ間隔を指定する方法はありませんでしょうか。

桁数をスペースを使って調整してから、均等割付してみてください。
例えば、MAX桁数が10桁なら

Right(Space(10) & [金額], 10)
・ツリー全体表示

【7598】手書き用請求書の金額欄位置合わせ
質問  ユミちゃん  - 06/3/29(水) 11:42 -

引用なし
パスワード
   いつもお世話になります。
手書き用請求書の金額欄の位置合わせが上手くいきません。
明朝体でフォントサイズ12に設定していますが、
文字の配置を標準にすると文字間隔が詰まりすぎになります。
均等割付にすると金額の桁数によって誤差が生じます。
数字と数字のピッチ間隔を指定する方法はありませんでしょうか。
この3日間文字種別を変更したり文字サイズを変更したりといろいろ
と試しておりますが、ギブアップです。
宜しくお願いします。
・ツリー全体表示

【7597】Re:コンボボックスにデーターがない時全表...
回答  Gin_II  - 06/3/29(水) 11:13 -

引用なし
パスワード
   > コンボボックスで選択したデーターをクエリの抽出条件に
> [Forms]![F_帳票]![メーカ]を記述して絞込みを行なっているのですが
> 何も選択してない時は全表示にしたいのです。

[Forms]![F_帳票]![メーカ] Or [Forms]![F_帳票]![メーカ] Is Null
のように抽出条件を入れたらどうでしょうか?
・ツリー全体表示

【7596】Re:コンボボックスにデーターがない時全表...
回答  かく  - 06/3/29(水) 11:02 -

引用なし
パスワード
   ▼Gin_II さん:
>>早速ですがACCESSのコンボボックスで絞込みをしたいのですが
>>何も選択しない時は全表示にしたいのですが、どうすればよろしいでしょうか?
>
>コンボボックスで、絞込みはできません。
>絞り込むための条件を入力されるのでしょうけど ^^;
>
>どのような方法で、絞込みをするのでしょうか?(クエリかな?)

Gin_IIさん回答大変ありがとうございます。
質問の説明不足でわかりにくくてすみませんでした。
コンボボックスで選択したデーターをクエリの抽出条件に[Forms]![F_帳票]![メーカ]を記述して絞込みを行なっているのですが何も選択してない時は全表示に
したいのです。
次のような条件式で出来るかなと思ったのですがNullの時は何も表示されません?
IIf(IsNull([forms]![F_帳票]![メーカ]),"*",[forms]![F_帳票]![メーカ])
何かいいアドバイスを宜しくお願いします。
・ツリー全体表示

【7595】Re:Excelからのインポート時に数値がNull...
お礼  ゆり  - 06/3/29(水) 0:43 -

引用なし
パスワード
   まさ7251 さん、引き続きご回答ありがとうございました。

ご提案頂いた回避策と、頂いたURLの情報を元に考えてみます。
おそらく自分の力量からいってすぐには解決できそうにないので、
結果報告はまた改めてさせて頂きます。
まずは、取り急ぎお礼まで。
夜遅くにご回答ありがとうございました。

また、便乗で申し訳ありませんが、
追加情報を下さったGin_IIさんもありがとうございました。

Gin_IIさんには、他の掲示板へのマルチポストを指摘しても頂きました。
焦って周りがすっかり見えなくなっていたところでのご指摘
(おかげさまで冷静さをとりもどしました。)、
また、今回の追加情報、ありがとうございました。
・ツリー全体表示

【7594】Re:Excelからのインポート時に数値がNull...
発言  まさ7251  - 06/3/28(火) 23:39 -

引用なし
パスワード
   ある御方から追加情報戴きました。

http://support.microsoft.com/kb/109376/ja/
http://x7net.com/~access/AcTipsExcelLinkDataType.html

ぜひご参考に。
Gin_IIさん、ありがとうございました。
・ツリー全体表示

【7593】Re:Excelからのインポート時に数値がNull...
発言  まさ7251  - 06/3/28(火) 23:32 -

引用なし
パスワード
   デバックの際に、drs2.Fields(3) の値を確認してみても、
Nullになっていたのですよね?

ちなみに、こちらでも再現できました。
・5行のデータを作成。
・値段の列は、1行のみ数値。後は文字列。
上記の場合、数値の行では、Nullが返ってきました。

逆に、1行のみ文字列。後は数値とすれば、
文字列の行で、Nullが返ってきました。

どのような仕組みかはわかりませんが、
Accessが値段の列をテキスト型と判断しているのではなでしょうか。
判断の仕組みは、何らかの説明がMicrosoftにあったような気もしますが、
忘れました。

回避策として2案ほど。
1.いったん、インポートしてから処理を行う。
2.OLE等で、Excelを開きデータを取得する。
・ツリー全体表示

【7592】Re:Excelからのインポート時に数値がNull...
回答  ゆり  - 06/3/28(火) 23:03 -

引用なし
パスワード
   まさ7251 さん、レスありがとうございます。
説明不足ですみません。

>>  エクセルシートをdrs2として開き、
>
>とは、具体的にどうやっているのですか?

Set dcn1 = CurrentDb
Set drs1 = dcn1.OpenRecordset(a, dbOpenDynaset)

Set dcn2 = OpenDatabase(xFilename, False, False, "Excel 8.0;") 
Set drs2 = dcn2.OpenRecordset(xSheetName)           

というように、開いて(操作して?)います。
xFilename、xSheetNameは複数の同形式のファイル・シートを扱いますので、
取り込むファイル名、シート名は変数で持っています。

>>  If IsNull(drs2.Fields(3)) Or drs2.Fields(3) = "" Then
>Fields(3)とありますけど、
>>商品名・値段と2つのフィールドがあるエクセルデータ
>ではないのですか?


詳しくは、エクセルは 分類・商品名・詳細・値段 のフィールドがあります。

分類 = drs2.Field(0)
商品名 = drs2.Field(1)
詳細 = drs2.Field(2) 
値段 = drs2.Field(3)

>とりあえず、これだけの情報では、原因は思いつきません。

>drs2.Fields(3)
>これに、どのような値が入っているのかを
>確認してみてはどうでしょうか。

プログラム上でデバックをして、値の変化を追っていきましたが、
例えばエクセルには250と入力されている箇所でもNullと判断されています。

問題のエクセルは、いくつかのクライアントに入力してもらい、
その入力してもらったものを取り込むというものです。
元のフォーマットはこちらで作り、勝手に変更できないよう、
入力が必要なセル以外はプロテクトをかけてあります。

実は、中にはきちんとインポートされているものもあります。

エクセル内に何か不要なデータが入力されていないかとも思い、
CSV形式で吐き出し、空白等が入力されていないかも確認しましたが、
特に問題はありませんでした。

また、エクセルは各国から取り寄せているため、入力されたフォントに
問題があるのかとも考えましたが、こちらも問題ありませんでした。

以上のことから、Accessのプログラムがいけないのか、
Excel側がいけないのかすら、分からないのです。

念のためこれからエクセルシートを新しく作り直してみます。

説明が下手で、分かりにくいかもしれません。
また長文になりましたが、どうぞ宜しくお願い致します。
・ツリー全体表示

【7591】Re:コンボボックスにデーターがない時全表...
発言  Gin_II  - 06/3/28(火) 22:15 -

引用なし
パスワード
   >早速ですがACCESSのコンボボックスで絞込みをしたいのですが
>何も選択しない時は全表示にしたいのですが、どうすればよろしいでしょうか?

コンボボックスで、絞込みはできません。
絞り込むための条件を入力されるのでしょうけど ^^;

どのような方法で、絞込みをするのでしょうか?(クエリかな?)
・ツリー全体表示

【7590】Re:Excelからのインポート時に数値がNull...
発言  まさ7251  - 06/3/28(火) 22:09 -

引用なし
パスワード
   >  エクセルシートをdrs2として開き、

とは、具体的にどうやっているのですか?

>  インポート先テーブルをdrs1としています。
>
>  If IsNull(drs2.Fields(3)) Or drs2.Fields(3) = "" Then

Fields(3)とありますけど、
>商品名・値段と2つのフィールドがあるエクセルデータ
ではないのですか?

とりあえず、これだけの情報では、原因は思いつきません。

drs2.Fields(3)
これに、どのような値が入っているのかを
確認してみてはどうでしょうか。
・ツリー全体表示

【7589】Excelからのインポート時に数値がNullと判...
質問  ゆり  - 06/3/28(火) 21:15 -

引用なし
パスワード
   初めて質問させていただきます。

エクセルから数値をインポートする時、数値が入力されていても、
何故かアクセスではNullと判断されてしまいます。

詳細は、
商品名・値段と2つのフィールドがあるエクセルデータを
アクセスのテーブルにインポートします。

取り込み先のテーブルは商品名はテキスト型、
値段は数値型にしてあります。

値段フィールドが空白、またはNullの場合は、0を入れるようにしてあります。
   
  エクセルシートをdrs2として開き、
  インポート先テーブルをdrs1としています。

  If IsNull(drs2.Fields(3)) Or drs2.Fields(3) = "" Then
     drs1("kakaku").Value = 0
  Else
     drs1("kakaku").Value = drs2.Fields(3)
  End If

しかし、値段フィールドに数値が入っていても、Nullと判断されてしまう
現象が起こりました。

正直、エクセルシート側、またはアクセス側どちらに問題があるのかすら、
分かりません。

どなたか問題解決方法をご存知の方、
または「ココがいけないのではないの?」と何か思い当たることがある方、
アドバイスを頂けませんでしょうか。

宜しくお願い致します。
・ツリー全体表示

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