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

     

リストへもどる

投稿記事の一括表示

タイトルクエリの項目を削除するには
記事No42707
投稿日: 2011/09/19(Mon) 14:48
投稿者さかい
OS:XP
Access Version:2002

クエリABCからあるフィールドを削除したくて、いといろとやってみましたが、

問題解決にならないです。

ご伝授下さい。

やりたいのは、

クエリ名:ABC

フィールド削除:もし名前といフィールドがあれば、削除します。

以下のコードを真似して、やってみましたが、限界が感じています。

--------------------------------------------------------------------------------------
次の例では、Employees テーブルから Salary フィールドを削除します。

Sub AlterTableX3()

Dim dbs As Database

' この下の行を、使用しているコンピュータ上の

' Northwind のパスに変更してください。

Set dbs = OpenDatabase("Northwind.mdb")

' Salary フィールドを

' Employees テーブルから削除します。

dbs.Execute "ALTER TABLE Employees " _

& "DROP COLUMN Salary;"

dbs.Close

End Sub
--------------------------------------------------------------------------------------

タイトルRe: クエリの項目を削除するには
記事No42708
投稿日: 2011/09/19(Mon) 15:07
投稿者hatena
> やりたいのは、
> 
> クエリ名:ABC
> 
> フィールド削除:もし名前といフィールドがあれば、削除します。
> 
> 以下のコードを真似して、やってみましたが、限界が感じています。

提示されているコードはテーブルからフィールドを削除するコードです。

クエリは方法が異なります。
クエリは中身はSQLですので、そのSQLを書きかえることになります。

コード例


Dim qd As DAO.QueryDef

Set qd = CurrentDb.QueryDefs("ABC")

qd.SQL = Replace(qd.SQL, "名前,", "")


ただし、SQLで、
テーブル名.名前
とか、
[テーブル名].[名前]
など、いろいろな書き方があるので、事前にどのような書き方なのか
調べておいて、それに合わせる必要があります。

タイトルRe^2: クエリの項目を削除するには
記事No42709
投稿日: 2011/09/19(Mon) 15:55
投稿者Hank
> ただし、SQLで、
> テーブル名.名前
> とか、
> [テーブル名].[名前]
> など、いろいろな書き方があるので、

Dim qd As DAO.QueryDef
Dim fCount As Integer

Set qd = CurrentDb.QueryDefs("ABC")
fCount = qd.Fields.Count

   qd.SQL = Replace(qd.SQL, "[" & qd.Fields("名前").SourceTable & "].[名前]", "")

If qd.Fields.Count = fCount Then
   qd.SQL = Replace(qd.SQL, qd.Fields("名前").SourceTable & ".名前", "")
 End If

If qd.Fields.Count = fCount Then
   qd.SQL = Replace(qd.SQL, "名前", "")
 End If

で、どうでしょう?

タイトルRe^3: クエリの項目を削除するには
記事No42710
投稿日: 2011/09/19(Mon) 16:44
投稿者さかい
> で、どうでしょう?

早速、動かしてみましたが、

qd.SQL = Replace(qd.SQL, "名前", "") エラー3141がでました。



-------------------------------------------------------------------------------------------
Function test()
Dim qd As DAO.QueryDef
Dim fCount As Integer

Set qd = CurrentDb.QueryDefs("ABC")
fCount = qd.Fields.Count

qd.SQL = Replace(qd.SQL, "[" & qd.Fields("名前").SourceTable & "].[名前]", "")

If qd.Fields.Count = fCount Then
qd.SQL = Replace(qd.SQL, qd.Fields("名前").SourceTable & ".名前", "")
End If

If qd.Fields.Count = fCount Then
qd.SQL = Replace(qd.SQL, "名前", "")
End If

End Function

タイトルRe^4: クエリの項目を削除するには
記事No42711
投稿日: 2011/09/19(Mon) 17:03
投稿者Hank
>  エラー3141がでました。
エラー番号を覚えている者などいないんですから、
横着せずにメッセージを書かなきゃね。

タイトルRe^4: クエリの項目を削除するには
記事No42712
投稿日: 2011/09/19(Mon) 17:11
投稿者hatena
> qd.SQL = Replace(qd.SQL, "名前", "") エラー3141がでました。

qd.SQL = Replace(qd.SQL, "名前,", "")

では、どうかな。

Dim stSQL As String

stSQL = Replace(qd.SQL, "名前,", "")

いったん変数にいれて、デバッグで確認して、SQLとして正しいものになるように、
コードを修正しましょう。

エラー番号ではなく、エラーメッセージを提示する方が回答しやすいのは
Hankさんが指摘している通りです。

タイトルRe^5: クエリの項目を削除するには
記事No42716
投稿日: 2011/09/23(Fri) 21:42
投稿者さかい
返信遅くなり、すいません。

 コードを修正しました、実行しますと、エラーがなくなりましたが、「名前」のフィルドが削除
されないです。問題はどこにあるのですか?
教えてください。

タイトルRe^6: クエリの項目を削除するには
記事No42717
投稿日: 2011/09/24(Sat) 11:17
投稿者hatena
>  コードを修正しました、実行しますと、エラーがなくなりましたが、「名前」のフィルドが削除
> されないです。問題はどこにあるのですか?
> 教えてください。

現状のクエリのSQL文、
実際に記述したコード、

以上の情報をご提供ください。

あいにく千里眼能力は持ち合わせませんので。

タイトルRe^7: クエリの項目を削除するには
記事No42718
投稿日: 2011/09/24(Sat) 12:36
投稿者さかい
現状のクエリのSQL文
ABC
------------------------------------------------------------------------------------------
SELECT ABC1.クラス, ABC1.名前
FROM ABC1;
------------------------------------------------------------------------------------------

修正後のコード
------------------------------------------------------------------------------------------
Function test()
Dim qd As DAO.QueryDef
Dim fCount As Integer

Set qd = CurrentDb.QueryDefs("ABC")
fCount = qd.Fields.Count

qd.SQL = Replace(qd.SQL, "[" & qd.Fields("名前").SourceTable & "].[名前]", "")

If qd.Fields.Count = fCount Then
qd.SQL = Replace(qd.SQL, qd.Fields("名前").SourceTable & ".名前", "")
End If

If qd.Fields.Count = fCount Then
'qd.SQL = Replace(qd.SQL, "名前", "")
qd.SQL = Replace(qd.SQL, "名前,", "")

End If

End Function
------------------------------------------------------------------------------------------

タイトルRe^8: クエリの項目を削除するには
記事No42719
投稿日: 2011/09/24(Sat) 13:26
投稿者hatena
SELECT ABC1.クラス, ABC1.名前
FROM ABC1;

なら、

Function test()
    Dim qd As DAO.QueryDef

    Set qd = CurrentDb.QueryDefs("ABC")

    qd.SQL = Replace(qd.SQL, ", ABC1.名前", "")

End Function

で。

最初にも書きましたが、ABC1.名前 以外の書式になる可能性があるなら、
それにも対応できるようにコーディングする必要があります。
その場合は、まずは自力でチャレンジしてくださいね。(Hankさんのコードをご参考に。)

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

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