重複の削除

       
 


・重複の削除、ACCESS編  
( EXCELで重複削除したい場合はEXCEL編を参照)
・重複の取得、ACCESS編
( ORACLEで重複取得したい場合はORACLE編を参照)
・外部結合の説明

・一度のSQLで複数レコード登録する
・文字列をテキストボックスに表示して確認したい
・テキストボックスにテーブルの値を表示したい(コントロールプロパティ)
・サブフォームのテキストボックスにて、テーブルの値を表示したい(コード【RecordSouce】)
・ADOを使用したDB接続その1(ORACLE)
・ADOを使用したDB接続その2(ORACLE)
・DAOを使用したDB接続その1(ORACLE)
・DAOを使用したDB接続その2(ORACLE)
・ACCESS、カレントDB接続
・ACCESS、他のDB接続

・補足

 

重複の削除、ACCESS編

下図は、エクセルファイル

ACCESSより右クリックで、importを選択

importしたいEXCELファイルを選択する。

 

主キーを設定しないを選択

 

ACCESSにインポートされた。

 

 

あとは、重複がある列でgroup

フィールド2でグループ化するならば、

select フィールド2 from テーブル group by フィールド2

フィールド2、フィールド3、でグループ化するならば、

select フィールド2, フィールド2 from テーブル group by フィールド2,フィールド3

 

 

 

重複の取得、ACCESS編

クエリの『新規作成→重複クエリウィザード』で重複行を取得する。

 

 

一度のSQLで複数レコード登録

複数のレコードを一回のSQLで登録するには、
1.添付のテーブルに登録するレコードを入れておく(10件なら10件)
2.セレクト、インサートによって一回のSQLで登録することができる。
(普通にINSERTする場合には、登録レコード数文LOOPで回す必要がある。)

INSERT INTO [テーブル名]
( カラム1, カラム1, カラム1, カラム1, カラム1, カラム1, カラム1, カラム1, カラム1, カラム1, カラム1)
SELECT
テーブル2.カラム2 ,
format(date(),'YYYYMMDD'),
format(time(),'HHMM'),
テーブル2.カラム3,
テーブル2.カラム4,
テーブル2.カラム5,
テーブル3.カラム1,
iif(テーブル2.自宅外送付='自宅','0','1'),
'0' ,
テーブル3.カラム2,
now()
FROM
(テーブル2 INNER JOIN テーブル3 ON テーブル2.カラム = テーブル3.カラム)
INNER JOIN テーブル3 AS テーブル添付 ON テーブル2.カラム = テーブル添付.カラム
where
テーブル2.カラム='4444'
AND テーブル3.カラム = '12222'

 

文字列をテキストボックスに表示して確認したい

Me.SQL = strSQL              ・・・SQLはテキストボックス名です。
又は、
'Forms![form名]![SQL] = strSQL      ・・・SQLはテキストボックス名です。

 

テキストボックスにテーブルの値を表示したい(コントロールプロパティ)

1.テキストボックスを作成(ラベル削除)
2.コントロールプロパティより、【= [テーブル名]![カラム名]】を入力
3.【!】を【.】に変更
4.【[カラム名]】を【カラム名】に変更
5.【=】を削除 (例:【[テーブル名].カラム名】)
6.コード表示の【RecordSouce】にテーブル名を入力(例:【テーブル名】)

 

サブフォームのテキストボックスにて、テーブルの値を表示したい(コード【RecordSouce】)

デザインビューにて
1.フォーム作成画面にて、サブフォームを作成
2.サブフォーム名をサブC』とする
3.サブフォームプロパティのソースオブジェクトがテーブルを参照している必要がある。
(名前は、テーブル名のサブフォーム名@』である。変更可能) (例:テーブル1B』)
4.データベースウィンドウにてフォームオブジェクト『@』ができる。(サブフォーム)
5.デザインビューにて、サブフォーム内の詳細のコントロールソース名が、テーブルのカラム名となっている『A

 

コードにて

Private Sub ボタン_Click()
Dim sqlstr As String
''SQLステートメント
sqlstr = "SELECT カラム名A』 FROM テーブル1B』"
'レコード取得
Me.サブC』.Form.RecordSouce = sqlstr


※補足
デザインビューにて、カラム名 コードにてカラム名を一致させる必要がある。A
デザインビューにて、テーブル1 コードにてテーブル1を一致させる必要がある。B
デザインビューにて
、サブ コードにてサブを一致させる必要がある。C

ADO接続その1(モジュールにて)

Sub adoDB1()
Dim cn As New ADODB.Connection
'レコードセット宣言
Dim rs As ADODB.Recordset
Dim sqlstr As String
'ADOを使いORACLEのDBを開きます。CONNECTSTRING=ORACLEのインスタンス名
cn.Open "Driver={Microsoft ODBC for Oracle};" & _
"CONNECTSTRING=next; UID=SCOTT; PWD=TIGER;"
'データベースのオープン
Set cn = Application.CurrentProject.Connection

Set rs = cn.Execute("SELECT * from [SCOTT_DEPT]")

'確認
Do Until rs.EOF
Debug.Print rs!DEPTNO
rs.MoveNext
Loop

'データベースクローズ処理
cn.Close

End Sub

ADO接続その2(モジュールにて)

Sub adoDB2()
Dim cn As New ADODB.Connection
'レコードセットのインスタンス作成
Dim rs As New ADODB.Recordset
Dim sqlstr As String
'ADOを使いORACLEのDBを開きます。
cn.Open "Driver={Microsoft ODBC for Oracle};" & _
"CONNECTSTRING=next; UID=SCOTT; PWD=TIGER;"
'データベースのオープン
Set cn = Application.CurrentProject.Connection

sqlstr = "SELECT * from SCOTT_DEPT"
rs.Open sqlstr, cn, adOpenKeyset, adLockOptimistic

'確認
Do Until rs.EOF
Debug.Print rs!DEPTNO
rs.MoveNext
Loop

'データベースクローズ処理
cn.Close

End Sub

 

DAO接続その1(モジュールにて)

 

コードエディタにて、ツール→参照設定→Microsoft DAO 3.6を選択

Sub daoDB1()
Dim db As DAO.Database
Dim tbl As DAO.Recordset

'DAOを使いORACLEのDBを開きます。
Set db = CurrentDb

'テーブルのオープン
Set tbl = db.OpenRecordset("SCOTT_DEPT", dbOpenDynaset)

'確認
Do Until tbl.EOF
Debug.Print tbl!DEPTNO
tbl.MoveNext
Loop

'データベースクローズ処理
db.Close

End Sub

 

DAO接続その2(モジュールにて)

Sub daoDB2()
Dim db As DAO.Database
Dim tbl As DAO.Recordset
Dim sqlstr As String

'DAOを使いORACLEのDBを開きます。
Set db = CurrentDb

sqlstr = "SELECT * from SCOTT_DEPT"

'テーブルのオープン
Set tbl = db.OpenRecordset(sqlstr, dbOpenDynaset)

'確認
Do Until tbl.EOF
Debug.Print tbl!DEPTNO
tbl.MoveNext
Loop

'データベースクローズ処理
db.Close

 

ACCESS,自分のDBを参照

Public Sub startCurrentDB()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim mysql As String
'カレント接続
Set cn = CurrentProject.Connection

'Debug.Print cn.ConnectionString
mysql = "SELECT * FROM テスト"
rs.Open mysql, cn, adOpenKeyset, adLockOptimistic

'確認
Do Until rs.EOF
Debug.Print rs![氏名]
rs.MoveNext
Loop
cn.Close: Set cn = Nothing

End Sub

ACCESS,他のDBを参照                                                  

Public Sub startotherDB()
Dim cn As New ADODB.Connection
'他ACCESS接続
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=C:\Documents and Settings\computer_name\デスクトップ\dbdb.mdb;"

cn.Open
MsgBox "成功"
cn.Close: Set cn = Nothing

End Sub

 

補足

'Access97、2003での手順
Dim db As Database
Dim tbl As Recordset
'データベースのオープン(データベースオブジェクトの作成)
Set db = DBEngine.Workspaces(0).Databases(0)
'テーブルのオープン(レコードセットオブジェクトの作成)
Set tbl = db.OpenRecordset("住所録テーブル", DB_OPEN_DYNASET)

 ※Access97、2003の場合


'Access2000での手順
Dim db As DAO.Database
Dim tbl As DAO.Recordset
'データベースのオープン(データベースオブジェクトの作成)
Set db = CurrentDb
'テーブルのオープン(レコードセットオブジェクトの作成)
Set tbl = db.OpenRecordset("住所録テーブル", dbOpenDynaset)


                                              Topへ