【お題】NEW演歌

<環境>ACCESS2000

サブフォーム(データシートビュー)の並び替えを、メインフォームのオプショングループの
更新後処理イベントで操作しようと思っています。
コーディングは以下の通りです。
並び替え自体はうまく動作するのですが、メインフォームで閉じるボタンを押すと
「直前の操作はキャンセルされました.」とエラーが出てしまいます。
サブフォームのプロパティを替えることが原因なのでしょうか?
どなたか回避策をお願いします。

<メインフォーム開く時>
Public Function 開くイベント()

DoCmd.OpenForm "Fメイン"

Set FM = Forms![Fメイン]
Set FS = Forms![Fメイン]![SubForm].Form

'テーブル作成
strSQL = "CREATE TABLE AAA ("
strSQL = strSQL & " [選択] [bit] NULL ,"
strSQL = strSQL & " [番号] [varchar] (7) NOT NULL ,"
strSQL = strSQL & " [カナ] [varchar] (20) NULL ,"
strSQL = strSQL & " PRIMARY KEY(番号))"
db.Execute strSQL

'データ作成
strSQL = "INSERT INTO AAA"
strSQL = strSQL & " SELECT"
strSQL = strSQL & " [選択]= 1 ,"
strSQL = strSQL & " [番号]= [番号] ,"
strSQL = strSQL & " [カナ]= [カナ] "
strSQL = strSQL & " FROM BBB"
db.Execute strSQL

FS.RecordSource = "SELECT * FROM AAA ORDER BY 番号"

FM.Refresh

End Function

<オプショングループ更新後処理>
Private Sub GRP_並び順_AfterUpdate()

Select Case Me!GRP_並び順
Case 1
With Me![SubForm].Form
.OrderBy = "番号"
.OrderByOn = True
End With
Case 2
With Me![SubForm].Form
.OrderBy = "カナ"
.OrderByOn = True
End With
End Select

End Sub

A 回答 (3件)

訂正2


単にクエリをレコードソースにすれば済む問題のようにも思えます。
    • good
    • 0

訂正


 If tdf.Name = AAA Then
 If tdf.Name = "AAA" Then
です。
    • good
    • 0

最初に直接的な回答から、


メニュー→ツール→オプションの『名前の自動修正』のチェックを外す。
最適化を試す、もしくは新規MDBを作成してすべてインポート。
念のために『名前の自動修正』オプションは無し。
で解決するかもしれません。

ところで、提示されたコードがエラーもなく進むのは不思議です。
'テーブル作成
strSQL = "CREATE TABLE AAA ("
strSQL = strSQL & " [選択] [bit] NULL ,"
strSQL = strSQL & " [番号] [varchar] (7) NOT NULL ,"
strSQL = strSQL & " [カナ] [varchar] (20) NULL ,"
strSQL = strSQL & " PRIMARY KEY(番号))"
db.Execute strSQL

'テーブル作成
Dim strSQL as string
strSQL = "CREATE TABLE AAA ("
strSQL = strSQL & " 番号 varchar(7) CONSTRAINT BANGO PRIMARY KEY,"
strSQL = strSQL & " 選択 bit NULL,"
strSQL = strSQL & " カナ varchar(20) NULL)"
Currentdb.Execute strSQL
のような感じでは?

'データ作成 の方も、やりたいことは分かりますが?
テーブル作成処理も無くして、単純にテーブル作成クエリで済ませてはどうですか?

  Dim strSQL as string
  Dim tdf As DAO.TableDef

  '既存テーブル削除
  For Each tdf In CurrentDb.TableDefs
    If tdf.Name = AAA Then
      CurrentDb.Execute ("drop table " & tdf.Name)
    End If
  Next

  strSQL = "SELECT 1 AS 選択, 番号, カナ INTO AAA FROM BBB"
  Currentdb.Execute strSQL

のような感じで。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報