Access VBA質問箱 IV

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

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


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

【11704】Re:更新クエリで パラメータの入力ダイ...
発言  よろずや  - 10/7/3(土) 23:26 -

引用なし
パスワード
   こちらをどうぞ。

他のテーブルを基にテーブルを更新する (MDB)
//office.microsoft.com/ja-jp/access-help/HP005188710.aspx
・ツリー全体表示

【11703】更新クエリで パラメータの入力ダイアロ...
質問  pon  - 10/7/3(土) 16:43 -

引用なし
パスワード
   こんにちは よろしくお願いいたします


更新クエリが理解できていないため
今までは、削除、追加で処理していました

今回更新クエリを使用しようと下記試してみましたがうまく出来ません

テスト方法
同じ構造のテーブル T1、T2を自MDB内に用意しました


はじめに、T1の値を直接指示で更新してみました

UPDATE T1
SET
T1.F1 = "あああ",
T1.F2 = "いいい",
T1.F3 = "うううう"
WHERE (((T1.F0)="123"));

は動作しましたが、下記では


T1テーブルをT2で更新しようとすると
パラメータの入力ダイアログ
のダイアログが出てしまいます

UPDATE T1
SET
T1.F1 = [T2]![F1],
T1.F2 = [T2]![F2],
T1.F3 = [T2]![F3]
WHERE (((T1.F0)="123"));


UPDATE T1
SET
T1.F1 = T2.F1,
T1.F2 = T2.F2,
T1.F3 = T2.F3
WHERE (((T1.F0)="123"));

上記 2パターン試してみましたが
どちらも

T2!F1
T2!F2
T2!F3

パラメータの入力ダイアログ が出てしまいます

アドバイスよろしくお願いいたします
・ツリー全体表示

【11702】Re:インポートについて
発言  sou  - 10/6/24(木) 19:54 -

引用なし
パスワード
   こんにちは、souです。
表題の件ですが、インポートしたCSVファイルをリネームするという方法ではだめでしょうか?
インポートした日時にリネームします。
インポート前 CSV.csv

インポート後 CSV20100624-193031.csv
別な意味で時間の履歴も残ります。同じものを選ばないという発想です。
いきなり脇道にそれた意見な上安直で失礼ですが、ご参考になれば。
Dim d as Integerを宣言し、DoCmd.TransferText後に
d = InStrRev(strFile, ".", -1, vbTextCompare)
Name strFile As Left(strFile, d - 1) & Replace(strFile, ".", Format(Now(), "yyyymmdd-hns") & ".", d)
・ツリー全体表示

【11701】インポートについて
質問  masayopapa  - 10/6/23(水) 14:46 -

引用なし
パスワード
   お世話になります
現在下記にてCSVをインポートしていますが追加機能がほく質問しました
■追加したいこと
二重インポートを防ぎたい
1度インポートしたファイルはメッセージで表示させたい
(何時何分にインポートした履歴があります再度インポートしますか?)など

ファイル名テーブルにインポート名と時間を毎回インポートごとに記載させ
同じファイル名がヒットするとメッセージでお知らせのようなイメージです

現在のVBAは前任者のもので
退職して連絡がとれません;;
初心者ですがご教授の程宜しくお願いします

Private Sub コマンド1_Click()


Dim myFName As Variant
Dim myPrompt As String

With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Add "テキストファイル1", "*.txt;*.csv;*.prn"
.ButtonName = "確認"
If CBool(.Show) Then
For Each myFName In .SelectedItems
myPrompt = myPrompt & vbCrLf & CStr(myFName)
Next
myPrompt = Mid$(myPrompt, 3)
Me.テキスト1 = myPrompt
Dim strFile As Variant
If MsgBox("インポートしますか?", 4, "実行確認") = vbYes Then
For Each strFile In Split(Me!テキスト1, vbCrLf)
DoCmd.TransferText acImportDelim, "データ", "データ", strFile, False

'DoCmd.TransferText acImportDelim, "CSV", "DB", strFle, False
'DoCmd.TransferText acImportDelim, "CSV", "DB", strFle & myPrompt, False, ""

Next


Me.Requery '再更新
Me.Recalc
MsgBox "データを更新しました"

End If
Else
MsgBox "ファイルは選択されていません。"
End If
End With
End Sub
・ツリー全体表示

【11700】Re:印刷済みにチェックをつける
お礼  chi-i  - 10/6/18(金) 19:11 -

引用なし
パスワード
   小僧さん
こんにちは。

アドバイスありがとうございました。
そして、本当の本当に申し訳ありません。

すごく初歩的なミスをしていました。

DoCmd.OpenQuery "更新クエリ", acViewPreview 


アクションクエリなのに「acViewPreview 」になっていました。

会社からデータを持って来ていなかったので、こんな感じでかきました。と
ここに載せてしまったので。。。


Google等で検索もしていただいて、本当にすみませんでした。
ありがとうございます。

>更新クエリ、追加クエリを実行するのであれば
>DAO や ADO の Executeメソッドを使ってみた方が
>安定するかもしれません。

そうなんですか。。。
勉強してみます。

また、お世話になるかもしれません。
その際は、これに懲りずどうかよろしくお願いいたします。
・ツリー全体表示

【11699】Re:印刷済みにチェックをつける
発言  小僧  - 10/6/18(金) 12:48 -

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

>この後、このときチェックしたレコードの印刷済みに
> チェックを入れたいのですが、ここの書き方がわかりません。

> DoCmd.OpenQuery "更新クエリ", acViewNormal '印刷したいチェックがyesのレコードの印刷済みにチェック

更新クエリの中身がご提示されていない為
正確な事は言えませんが
書き方としては問題なさそうに思われます。

(当方は Docmd の OpenQuery メソッドを使わないので
 間違っていたら 申し訳ありません)

>「アクションクエリなため、レコードを表示できません」となってしまいます。
> このメッセージはどういうことなのでしょうか??

Google等で検索してもヒットしないエラーメッセージですね。
正確なエラーメッセージを記載して頂くと
回答が付きやすくなるかもしれません。

更新クエリ、追加クエリを実行するのであれば
DAO や ADO の Executeメソッドを使ってみた方が
安定するかもしれません。
・ツリー全体表示

【11698】Re:サブレポートを作るには
回答  小僧  - 10/6/18(金) 12:16 -

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

>レポート1
>レポート2
>、、、
>レポート10
>を、新しいレポートの「詳細」の中に無理やりいれてとりあえず体裁はできました。


|---------------------------------|
|メインレポート          |
|                 |
| |-----------------------------| |
| | サブレポート1        | |
| |               | |
| |DATA1            | |
| |DATA2            | |
| |DATA3            | |
| |-----------------------------| |
|                 |
| |-----------------------------| |
| | サブレポート2        | |
| |DATA4            | |
| |DATA5            | |
| |DATA6            | |
| |DATA7            | |

の様な作りで宜しいでしょうか。

>レポート1の直後に改ページに
>レポート2の直後に改ページに
>、、
>としたいわたしの意図


各サブレポートの間に改ページを入れると
解決できそうな気がします。

//office.microsoft.com/ja-jp/access-help/HP005187336.aspx
・ツリー全体表示

【11697】Re:データアクセスページについて
回答  YU-TANG  - 10/6/17(木) 3:07 -

引用なし
パスワード
   ▼へらぶな さん:
>ところで、OFFICE2007でDAPはサポートされなくなったわけですが、
>皆さんは、代替案として何を採用されておられるのでしょうか???
>
>やはりASP.NETが一般的なのでしょうか。それともSharePoint Server?
>もし、DAPからこう乗り換えた、っていう経験のある方が見えたら、
>ぜひご意見を伺いたく。

経験ないですが、この辺とか かなり良さ気に見えます。

EQL Data
ht tp://www.eqldata.com/

via
ht tp://accessblog.net/2010/06/another-way-to-run-access-inside-web.html
・ツリー全体表示

【11696】印刷済みにチェックをつける
質問  chi-i  - 10/6/17(木) 0:29 -

引用なし
パスワード
   こんばんわ。お世話になります。
早速ですが、「印刷済みにチェックをつける」について教えていただきたいです。

サブフォームに表示されたレコードのうち、印刷したいレコードにチェックをいれて印刷します。
(この後、このレコードを他のデータベースに追加クエリで登録)
ここまでは、VBAでうまく行ったのですが、
この後、このときチェックしたレコードの印刷済みにチェックを入れたいのですが、ここの書き方がわかりません。
更新クエリで、印刷したいチェックがyesで抽出して、印刷済みをyesにするイメージでVBAを書きましたが、「アクションクエリなため、レコードを表示できません」となってしまいます。
このメッセージはどういうことなのでしょうか??
すみません。会社で作成したVBAを持って帰ってないので、こんな感じで書いたという感じになってしまいましたが、↓のように書きました。
印刷したいチェックは何回も更新したいですが、印刷済みチェックはとにかく1回でも印刷したいチェックかyesになったらチェックしたいのです。

Sub ボタン1_Click()

'はじめにレポート1を印刷プレビューでひらいて確認メッセージをだし、OKなら↓
DoCmd.OpenReport "レポート1", acViewNormal '印刷したいチェックがyesが抽出条件のクエリからできたレポートを印刷
DoCmd.OpenQuery "追加クエリ", acViewNormal '追加クエリで印刷したいチェックしたレコードを他DBへ
DoCmd.OpenQuery "更新クエリ", acViewNormal '印刷したいチェックがyesのレコードの印刷済みにチェック

End Sub

よろしくお願いいたします。
・ツリー全体表示

【11695】Re:MDBでMDE風みたいな
回答  YU-TANG  - 10/6/11(金) 17:20 -

引用なし
パスワード
   こんにちは、YU-TANG です。

> というわけで、保存形式がAC2000になっていました

それはおそらく [ツール]-[オプション]-[詳細]-[既定のファイル形式] を
「Access 2000」 に設定して(あるいは設定されたまま)使っていたから
でしょう。

> 上記が原因かわかりませんが

関係ありません。原因ではないです。

> charだと
> フォーム名等の後ろに半角スペース等付いて50文字となってしまい
> うまく動作しませんでした

それが固定長ですから。そういうものです。

> char → text
> としてうまく動作することが出来ました
>
> Create Table 初めて勉強したような気がしますか
> こんな理解でいいですか

可変長にしたかったのでしたら、それでよろしいかと思います。
理解度を確認したいなら、Access 付属の JET SQL のヘルプを参照すると
よいです。インストール漏れていたら追加しておきましょう。

> また、イメージ的にはコード的なものに主キーを付けるような気がしていたのですが
> こういう、名称列とうか文字列フィールドで主キーを張ることは
> 一般的なことなのでしょうか
> なんか使いやすいような気がしますが少ない知識ではあまり見たことがないような気がします
>
> 普通だよとか コメント頂けると助かります

ふつうです。
主キーはユニークであることを保証できれば、別にコード類である
必要はないです。
ただ他のテーブルの外部キーになることを想定する場合は、ユニークな
複合キーが合っても、それとは別に単一フィールドのコードを設ける
場合もあります。
要はケースバイケースであって、DB 全体の設計の中で他テーブルとの
連携を抜きにして一律 主キー=コードとかその逆とか言うのはナンセンス
と言うことです。


余談ですが、ADO を使うとテーブル作成時に複合主キーを一発で張れます。

Dim s As String

s = "create table T1 ("
s = s & "FormName   TEXT   NOT NULL,"
s = s & "ControlName TEXT   NOT NULL,"
s = s & "ColumnOrder SMALLINT NOT NULL,"
s = s & "ColumnWidth SMALLINT NOT NULL,"
s = s & "ColumnHidden BIT   NOT NULL,"
s = s & "CONSTRAINT PrimaryKey PRIMARY KEY (FormName, ControlName)" ' ここで主キーを設定
s = s & ")"

CurrentProject.Connection.Execute s

それでは。
・ツリー全体表示

【11694】サブフォームのレコードセットでスナップ...
質問  pon  - 10/6/11(金) 16:15 -

引用なし
パスワード
   こんにちは
よろしくお願いいたします


サブフォーム自体の データプロパティのレコードセットは
スナップショットになっています
また、更新、削除、追加 は すべて はい です
レコードソースは
SQL直書きで、ファイルサーバーのMDBを指定しています

このサブフォームを直に開くと
当然ながら
更新、削除、追加 は できません


次に
上記サブフォームのある親フォームをデザインビューで開くと
当然ながら
サブフォームの
データプロパティのレコードセットはスナップショット
また、更新、削除、追加 は すべて はい です

この親フォームを開くと
手動でサブフォームの更新、削除、追加 が出来てしまいます

親フォームには
サブフォーム以外にテキストボックス、コンボボックスがいくつか張ってあるのですが
非連結です
関係があるか不明ですが
親フォームの自体の
データプロパティのレコードセットはスナップショット
また、更新のみ はい 、削除、追加 は すべて いいえ です


コントロールとしてのサブフォームのデータプロパティは
ソースオブジェクト サブフォーム
使用可能 はい
編集ロック いいえ
です


次に
親フォームをデザインビューで開いて
サブフォームの
データプロパティのレコードセットはスナップショットまま
更新、削除、追加 は すべて いいえ 
とすると
手動でサブフォームの更新、削除、追加 は 出来なくなりました


スナップショットで編集可なんてことってあるのでしょうか

わかりにくいと思いますが よろしくお願いいたします
・ツリー全体表示

【11693】Re:サブレポートを作るには
質問  にしもり  - 10/6/11(金) 12:05 -

引用なし
パスワード
   またすみません。
レポート1
レポート2
、、、
レポート10
を、新しいレポートの「詳細」の中に無理やりいれてとりあえず体裁はできました。

ところが、レコードの多寡によって、希望しないところで改ページにされてしまいます。
詳細のプロパティの改ページに、カレントセクションの後、、、とか意味不明の選択肢があります。

どれもやってみましたが、
レポート1の直後に改ページに
レポート2の直後に改ページに
、、、
としたいわたしの意図どおりにはなりませんでした。

レポートの「詳細」の中に他の複数のレポートを無理やりいれ、
レポートとレポートの間に必ず改ページしたいときどうすればよろしいでしょうか。
VBAでコントロール可能でしょうか。
・ツリー全体表示

【11692】Re:MDBでMDE風みたいな
質問  pon  - 10/6/11(金) 11:06 -

引用なし
パスワード
   小僧 さん ありがとうございます

素敵なコードのご提示頂き勉強になります
今までばらばらに知っていたことが
1つになって理解できたような気がします
また
動作確認することが出来、希望の操作かないました
ありがとうございました

試してみようと思う方への注意点ですが
Create Table T_列データ(
    フォーム名 char(50),
    サブコントロール名 char(50),
    コントロール名 char(50),
    幅 Int,
    順番 Int
);
のインデントに2バイトのスペースがあって
そのまま保存しようとすると
フィールド定義の構文エラーです。
となってしまいます
Create Table T_列データ(
フォーム名 char(50),
サブコントロール名 char(50),
コントロール名 char(50),
幅 Int,
順番 Int
);
とかすると保存できるようになります


下記2点アドバイス頂けると助かります
よろしくお願いいたします

Q1

ちょっと長ったらしいですがよろしくお願いいたします

AC2003なんですがMDEに変換しようとすると
 Microsoft Office Access 2000 の形式で保存されたデータベースから
 Microsoft Office Access ADE または MDE ファイルは作成できません。
 データベースを Microsoft Office Access の現在のバージョンに変換してください。
 その後、ADE または MDE ファイルを作成してください。
なんて出てしまいました
というわけで、保存形式がAC2000になっていました

上記が原因かわかりませんが

Create Table T_列データ(
    フォーム名 char(50),
    サブコントロール名 char(50),
    コントロール名 char(50),
    幅 Int,
    順番 Int
);


ht tp://www.atmarkit.co.jp/fnetwork/rensai/sql10/sql1.html
char:固定長の文字列を格納するデータ型
text:可変長の文字列を格納するデータ型

とかありました


charだと
フォーム名等の後ろに半角スペース等付いて50文字となってしまい
うまく動作しませんでした
char → text
としてうまく動作することが出来ました

Create Table 初めて勉強したような気がしますか
こんな理解でいいですか


Q2
複合主キーを下記SQLにて張ります。
Alter Table T_列データ add primary key (
  フォーム名,
  サブコントロール名,
  コントロール名
);
こんな簡単に主キーの設定が出来るんですね ♪
勉強になります

なんですが
フォーム名
サブコントロール名
コントロール名
で主キーを設定しなくても重複は発生しないような気がするのですが
どうなんでしょう

また、イメージ的にはコード的なものに主キーを付けるような気がしていたのですが
こういう、名称列とうか文字列フィールドで主キーを張ることは
一般的なことなのでしょうか
なんか使いやすいような気がしますが少ない知識ではあまり見たことがないような気がします

普通だよとか コメント頂けると助かります

よろしくお願いいたします
・ツリー全体表示

【11691】Re:サブレポートを作るには
お礼  にしもり  - 10/6/11(金) 10:31 -

引用なし
パスワード
   ▼sou さん:
レスありがとうございます。
[サブフォーム/サブレポート]コントロールという意味がわかりませんのでしらべてみます。
とりあえず無理やりドラッグ&ドロップしてみました。
またおききするかもしれません。
 
・ツリー全体表示

【11690】Re:サブレポートを作るには
発言  sou  - 10/6/11(金) 9:22 -

引用なし
パスワード
   おはようございます。

環境がないので確認してませんがAccess2000にサブレポートありませんか?
確かあったと思うのですが…
[サブフォーム/サブレポート]コントロールですよね?

無理やりでよいなら、フォームにサブフォームを置いて
フォームを印刷すればよいと思います。
・ツリー全体表示

【11689】サブレポートを作るには
質問  にしもり  - 10/6/10(木) 21:16 -

引用なし
パスワード
   こんにちは。
Access2000使用中です。

Access2007の教本をみていたら、サブレポートが作れるようですが
Access2000ではウィザードではできまませんでした。
そこでAccess2000でVBAで無理やりにサブレポートは作れませんでしょうか?

いま、
レポート1
レポート2
・・・レポート10
まであるのですが、それらをひとつのレポートとしてexportしたいのです。

アバウトな質問ですみません。
・ツリー全体表示

【11688】Re:MDBでMDE風みたいな
回答  小僧  - 10/6/10(木) 17:05 -

引用なし
パスワード
   ▼pon さん、YU-TANG さん:
こんにちは。

データシート形式のサブフォームで保存できる情報には
カラムの可視/不可視やソート順などもあるのですが、
今回は列の表示順と列幅のみ対応するとします。

前準備:
下記SQLをクエリのSQLビューに貼り付けて実行し
T_列データ テーブルを作成して下さい。

Create Table T_列データ(
    フォーム名 char(50),
    サブコントロール名 char(50),
    コントロール名 char(50),
    幅 Int,
    順番 Int
);

複合主キーを下記SQLにて張ります。
Alter Table T_列データ add primary key (
  フォーム名,
  サブコントロール名,
  コントロール名
);


サブフォームのUnload時に情報を取得しようとするとうまくいかなかった為、
メインフォームの方に下記の様なコードを設定します。

Private Sub Form_Load()
  If get_column_data(Me.Name) = False Then
    MsgBox "列データの設定に失敗しました"
  End If
End Sub

Private Sub Form_Unload(Cancel As Integer)

  If set_column_data(Me.Name, "objF_Sub") = False Then
                '^^^^^^^^^^
                'サブフォームを配置するコントロール名
    MsgBox "列データの取得に失敗しました"
  End If
  
End Sub


標準モジュールに下記を設定します。

Function set_column_data(strFormName As String, strSubFormName As String) As Boolean
Dim WS As DAO.Workspace
Dim DB As DAO.Database
Dim objCont As Control
Dim strSQL As String

On Error GoTo ErrEXE
  

  Set DB = CurrentDb
  Set WS = DBEngine.Workspaces(0)
  WS.BeginTrans
  
  strSQL = " DELETE FROM T_列データ " _
      & " WHERE フォーム名 ='" & strFormName & "'"
  DB.Execute strSQL, dbFailOnError
  
  
  For Each objCont In Forms(strFormName) _
        .Controls(strSubFormName).Form.Controls
    If objCont.ControlType = acTextBox Then
      strSQL = " INSERT INTO T_列データ " _
          & " VALUES ('" & strFormName & "' " _
              & ",'" & strSubFormName & "' " _
              & ",'" & objCont.Name & "' " _
              & "," & objCont.ColumnWidth _
              & "," & objCont.ColumnOrder _
              & ");"
      DB.Execute strSQL, dbFailOnError
    End If
  Next objCont


  WS.CommitTrans
  set_column_data = True
  Exit Function
ErrEXE:

  set_column_data = False
  WS.Rollback

End Function

Function get_column_data(strFormName As String) As Boolean
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim objCont As Control
Dim strSQL As String

On Error GoTo ErrEXE
  
  Set DB = CurrentDb
  
  strSQL = " SELECT * FROM T_列データ " _
      & " WHERE フォーム名 ='" & strFormName & "' ORDER BY 順番"
  Set RS = DB.OpenRecordset(strSQL, dbOpenSnapshot)
  
  Do Until RS.EOF
    Forms(strFormName).Controls(RS![サブコントロール名]) _
      .Form.Controls(RS![コントロール名]).ColumnWidth = RS![幅]
    Forms(strFormName).Controls(RS![サブコントロール名]) _
      .Form.Controls(RS![コントロール名]).ColumnOrder = RS![順番]
    RS.MoveNext
  Loop
  get_column_data = True
  Exit Function
ErrEXE:

  get_column_data = False

End Function


当方はWinXP、Access2007の環境ですが、
上記コードを accdb にて設定した後に accde ファイルに変換し
列幅、列順が保存されることを確認しております。

ご参考になれば幸いです。
・ツリー全体表示

【11687】Re:MDBでMDE風みたいな
質問  pon E-MAIL  - 10/6/10(木) 15:13 -

引用なし
パスワード
   YU-TANG さん 遅くなりました ありがとうございます m(_ _)m 

>その MDB の作りに依存するので、第三者には想定しようがないです。
ですね
自分自身でもなんか ? な Q だなと感じていました
そんな中,書き込み頂きましてありがとうございました
>おそらく最良のアドバイスは、しっかりテストしてください、
>ということになるでしょう。
了解です
ありがとうございました


MDEの動作について漠然とした理解しかありませんでした
アドバイスを頂いて調べてみましたが

ht tp://support.microsoft.com/kb/882282/ja
MDB ファイルは、フォーム、レポート、モジュールなどの編集や削除を行うことが
できますが、MDE ファイルに変換することによって、実行のみ可能で編集できない

2007 help
VBA コードは、コンパイルされて .accde ファイルに組み込まれユーザーが
VBA コードを参照したり編集はできません。accde ファイルのユーザーは、
フォームやレポートのデザインを変更出来ない

ぐらいしか見つからず
調査前と調査後 知識のレベルはほとんど変わりませんでした

こんなレベルでの考えで、MDEでは
デザイン変更できない → 列移動、列幅変更できない 保存できない
と思い込んでいました

>フォームを閉じるときに設定を退避して、開くときに復元すればいいだけです。

>MDE のように振舞うインターフェイスが欲しいなら、すなおに MDE を
>使ったほうがいいように思います。

ありがとうございます、MDEで出来るなら是非そうしたいです
で、
頂いたアドバイスでチャレンジしてみましたがうまくできませんでした


下記アドバイス頂けると助かります
よろしくお願いいたします

環境 XP ac2003

本来は、データシート形式のサブフォームのレイアウトを保存したかったのですが、まずは、テーブルのレイアウト保存で試してみました

Q1
  'レイアウトセット処理  Sub set_layout()
  を実行してもうまく動作しません
  どう修正すればいいでしょうか
  
  不具合状況
  ・データシートレイアウト保存テーブル作成 Sub make_tbl_layout()
   を実行し、レイアウト保存用空テーブルt_tbl_layout作成
  ・レイアウト取得処理   Sub get_layout()
   を実行し、レイアウト保存テーブルt_tbl_layoutにレイアウト情報取得

   t_tbl_layout レイアウト変更した情報
   id    Column_Orde    Control_Source    Column_Width
   0    2    hoge2    1350
   1    1    hoge1    765
   2    3    hoge3    3870
   3    12    hoge12    1065
   4    13    hoge13    1065
   5    14    hoge14    1065
   6    15    hoge15    1065
   7    16    hoge16    1065

   t_tbl_layout 初期レイアウト情報
   id    Column_Orde    Control_Source    Column_Width
   0    1    hoge1    -1
   1    2    hoge2    -1
   2    3    hoge3    -1
   3    4    hoge4    -1
   4    5    hoge5    -1
   5    6    hoge6    -1
   6    7    hoge7    -1
   7    8    hoge8    -1

   t_tbl_layoutのDTを初期レイアウト情報に書き換えて
   レイアウトセット処理   Sub set_layout()
   を実行してみましたが、レイアウトを戻すことができませんでした
   また、エラーも生じません

   この辺の処理、理解が出来ていません


Q2
  サブフォームのレイアウト取得する場合ですが
  動作的には
  メインフォームの閉じるボタンで
  DoCmd.Close acForm, Me.Name, acSaveYes
  'Application.Quit
  としているので
  サブフォーム自体のレイアウトは保存されています
  
  For i = 0 To FRM.Controls.Count - 1
  とすると、ラベル情報も取得してしまい
  いまいち処理がすっきりしないような気がしています
  また、ラベルとテキストボックスの切り分け処理方法が
  いまいち浮かびません
  
  もう少しいい方法が有るような気がしています
  がどうでしょう
  
  ちなみに、このサブフォームのレコードソースは
  SQL直書としています
  
  
他 
  レコード検索等はよく行っているのですが
  追加、削除はあまりやったことがありません
  エラー処理等、注意事項等ありましたら
  合わせてご教示頂けると助かります
  
  よろしくお願いいたします
  
  
'データシートレイアウト保存テーブル作成
Sub make_tbl_layout()

  Dim db As Database
  Dim Newtbl As TableDef
  
  On Error Resume Next
  DoCmd.DeleteObject acTable, "t_tbl_layout"
  On Error GoTo 0

  Set db = CurrentDb
  Set Newtbl = db.CreateTableDef("t_tbl_layout")

  With Newtbl
    'indexの作成の仕方未調査につき下記はindexとはしていない
    .Fields.Append .CreateField("id", dbInteger)
    .Fields.Append .CreateField("Column_Orde", dbInteger)
    .Fields.Append .CreateField("Control_Source", dbText, 50)
    .Fields.Append .CreateField("Column_Width", dbInteger)
  End With

  db.TableDefs.Append Newtbl

End Sub
  
  
  'レイアウト取得処理
  Sub get_layout()
  
    Dim FRM As Form
    Dim CTL As Control
    Dim i As Integer
    
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    
    'レイアウトDT削除
    DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE * FROM t_tbl_layout"
    DoCmd.SetWarnings True
    
    'レイアウト取得テーブルを開く場合
    DoCmd.OpenTable "Sheet1"
    Set FRM = Screen.ActiveDatasheet
    
    'レイアウト取得フォームを開く場合
    'DoCmd.OpenForm "MF01_JOB選択F"
    'Set FRM = Forms("MF01_JOB選択F").Controls("T02_PJ_DT").Form
    'では、データ形式のサブフォームのラベルも
    
    'For Each CTL In FRM.Controls
    '  Debug.Print CTL.ColumnOrder & " : " & CTL.ControlSource & " : " & CTL.ColumnWidth
    'Next CTL
    
    'レイアウト取得
    On Error Resume Next
    For i = 0 To FRM.Controls.Count - 1
    
      'Debug.Print i & ":" & FRM.Controls.Item(i).ColumnOrder & ":" & _
        FRM.Controls.Item(i).ControlSource & ":" & FRM.Controls.Item(i).ColumnWidth
    
      Set cn = CurrentProject.Connection
      Set rs = New ADODB.Recordset
      rs.Open "t_tbl_layout", cn, adOpenKeyset, adLockOptimistic
      rs.AddNew
      rs.Fields(0).Value = i
      rs.Fields(1).Value = FRM.Controls.Item(i).ColumnOrder  '指定並べ替え
      rs.Fields(2).Value = FRM.Controls.Item(i).ControlSource 'フィールド名
      rs.Fields(3).Value = FRM.Controls.Item(i).ColumnWidth  '列幅
      rs.Update
    
    Next
    On Error GoTo 0
    
    DoCmd.Close acTable, "Sheet1"
    'DoCmd.Close acForm, "MF01_JOB選択F"
     
    Set CTL = Nothing
    Set FRM = Nothing
  End Sub


  'レイアウトセット処理
  Sub set_layout()
  
    Dim FRM As Form
    Dim CTL As Control
    Dim i As Integer
    
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    
    
    'レイアウト取得テーブルを開く
    DoCmd.OpenTable "Sheet1"
    Set FRM = Screen.ActiveDatasheet
  
    'レイアウトセット
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    
    rs.Open "t_tbl_layout", cn, adOpenKeyset, adLockOptimistic
    
    rs.MoveFirst
    
    Do Until rs.EOF
    
     'Debug.Print rs.Fields.Item(1).Value & ":" & rs.Fields.Item(2).Value & ":" & rs.Fields.Item(3).Value
     
     FRM.Controls.Item(i).ColumnOrder = rs.Fields.Item(1).Value '指定並べ替え
     FRM.Controls.Item(i).ColumnWidth = rs.Fields.Item(3).Value '列幅
     
     rs.MoveNext
     
    Loop
    
    'On Error GoTo 0
    
    DoCmd.Save acTable, "Sheet1" 
  
    Set CTL = Nothing
    Set FRM = Nothing

  End Sub
・ツリー全体表示

【11686】Re:csvファイルのインポートがおかしい
お礼  momo  - 10/6/10(木) 14:16 -

引用なし
パスワード
   お世話になります。

取込むcsvファイルを間違えておりました!!
改行コード変更後のファイルでは首記現象は起こりませんでした。

解決致しました。

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

【11685】Re:csvファイルのインポートがおかしい
質問  momo  - 10/6/10(木) 14:03 -

引用なし
パスワード
   お世話になります。

>テキストファイルの生成はWindowsで行っているのでしょうか。
>UNIXで作成したテキストだったりすると、Windowsでは改行コードを認識できず、このような現象になることがあります。

Java 改行コードで調べたところ、"\n"はUNIXで"\r\n"がWindowsの改行コードの意らしく、私は前者である"\n"を使用しておりました。

なるほど!!早速プログラム中の"\n"を"\r\n"へ変更後実行し、生成されたcsvファイルをインポートプログラムで取込んで見たところ!!!

無理でした。先ほど同じく、1行しかインポートされておりません。
ちなみに、プログラムを使わずに手動でインポートするときれいいにインポートされます。
改行コードを変更する前も手動であればきれいにインポートされます。

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

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