Attribute VB_Name = "IDee_09_ADO" Option Explicit '******************************************************************************************************************************************************************** '******************************************************************************************************************************************************************** Type typ_ADO_Enviroment CommandTimeout As Integer CursorLocation As String Provider As String ExteProp As String End Type '******************************************************************************************************************************************************************** Type typ_ADO_XLS Conn As ADODB.Connection RecSet As ADODB.Recordset End Type '******************************************************************************************************************************************************************** Type typ_ADO_MDB_DaBaNew FieldName As ADODB.Recordset End Type '******************************************************************************************************************************************************************** Type typ_ADO_MDB Conn As ADODB.Connection RecSet As ADODB.Recordset ConnStr As String Catalog As ADOX.Catalog Table As ADOX.Table Index As ADOX.Index xDaBaNew As typ_ADO_MDB_DaBaNew End Type '******************************************************************************************************************************************************************** Type typ_ADO_Sdd BookName As String FolderName As String TableName As String KeyWord As String End Type '******************************************************************************************************************************************************************** Type typ_ADO_FilSys FilSys As Scripting.FileSystemObject End Type '******************************************************************************************************************************************************************** Type typ_ADO xEnviroment As typ_ADO_Enviroment xMDB As typ_ADO_MDB xXLS As typ_ADO_XLS xSdd As typ_ADO_Sdd xFilSys As typ_ADO_FilSys End Type '******************************************************************************************************************************************************************** Private ADO As typ_ADO '******************************************************************************************************************************************************************** '******************************************************************************************************************************************************************** '******************************************************************************************************************************************************************** ' ' ' ----------------------- ADO connect Access Database -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private Function fuc_ADO_MDB_Connect(ByRef cFolderName As String, _ ByRef cBookName As String, _ ByRef rConn As ADODB.Connection) As Boolean On Error Resume Next ADO.xEnviroment.CommandTimeout = 5 ADO.xEnviroment.CursorLocation = adUseClient ADO.xEnviroment.Provider = "Microsoft.Jet.OLEDB.4.0" Dim idFFN As String Dim idConnStr As String Dim idRecSetOpenStr As String idFFN = cFolderName & cBookName & ".mdb" idConnStr = "Data Source=" & idFFN Set ADO.xMDB.Conn = New ADODB.Connection rConn.CommandTimeout = ADO.xEnviroment.CommandTimeout rConn.CursorLocation = ADO.xEnviroment.CursorLocation ' adUseClient rConn.Provider = ADO.xEnviroment.Provider ' "Microsoft.Jet.OLEDB.4.0" Call rConn.Open(idConnStr) fuc_ADO_MDB_Connect = Err.Number = 0 End Function ' ----------------------- ADO connect Access Database end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ' ' ' ----------------------- ADO Start Parametr for Access Database -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private Function fuc_ADO_MDB_Standard_Value(ByRef rFolderName As String, _ ByRef rBookName As String, _ ByRef rTablName As String, _ ByRef rKeyWord As String) As Boolean On Error Resume Next Dim idFolder As Scripting.Folder Set ADO.xFilSys.FilSys = CreateObject("Scripting.FileSystemObject") rFolderName = "C:\SapWork_V11\IDW1\" rBookName = "IDee_DataBase" rTablName = "IDee_Table" rKeyWord = "" Select Case ADO.xFilSys.FilSys.FolderExists(rFolderName) Case False Set idFolder = ADO.xFilSys.FilSys.CreateFolder(rFolderName) End Select fuc_ADO_MDB_Standard_Value = Err.Number = 0 End Function ' ----------------------- ADO Start Parametr for Access Database end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ' ' ' ----------------------- ADO connect Access Database -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private Function fuc_ADOX_MDB_Connect(ByRef cFolderName As String, _ ByRef cBookName As String, _ ByRef cPasWod As String, _ ByRef rConnStr As String) As Boolean On Error Resume Next rConnStr = "" rConnStr = rConnStr & "Provider=Microsoft.Jet.OLEDB.4.0;" rConnStr = rConnStr & "Data Source=" & cFolderName & cBookName & ".mdb;" rConnStr = rConnStr & "Jet OLEDB:Database Password=" & cPasWod ' Falls die Datenbank durch ein Passwort geschctzt werden soll... ' rConnStr = rConnStr & "Jet OLEDB:Database Password=geheim;" fuc_ADOX_MDB_Connect = Err.Number = 0 End Function ' ----------------------- ADO connect Access Database end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ' ' ' ----------------------- ADO create Access DataBase -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private Function fuc_ADO_MDB_Create_DaBa(ByRef cFolderName As String, _ ByRef cBookName As String, _ ByRef cPasWod As String) As Boolean On Error Resume Next Dim idConnStr As String Dim idCatalog As ADOX.Catalog Select Case VBA.Right(cFolderName, 1) Case Is <> "\" cFolderName = cFolderName & "\" End Select Debug.Print Dir(cFolderName) Select Case ADO.xFilSys.FilSys.FolderExists(cFolderName) Case True Select Case ADO.xFilSys.FilSys.FileExists(cFolderName & cBookName & ".mdb") Case False Call fuc_ADOX_MDB_Connect(cFolderName, cBookName, cPasWod, idConnStr) Set idCatalog = New ADOX.Catalog idCatalog.Create idConnStr Set idCatalog = Nothing Select Case Err.Number Case Is = -2147217897 On Error Resume Next End Select End Select End Select fuc_ADO_MDB_Create_DaBa = Err.Number = 0 End Function ' ----------------------- ADO create Access DataBase end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ' ' ' ----------------------- ADO create Access Table -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private Function fuc_ADO_MDB_Create_Table(ByRef cFolderName As String, _ ByRef cBookName As String, _ ByRef cTablName As String, _ ByRef cFieldS As ADODB.Recordset, _ ByRef cPasWod As String) As Boolean On Error Resume Next Dim idCatalog As ADOX.Catalog Dim idConnStr As String Dim idTable As ADOX.Table Select Case VBA.Right(cFolderName, 1) Case Is <> "\" cFolderName = cFolderName & "\" End Select Select Case cFolderName & cBookName & ".mdb" Case Is <> "" Set idCatalog = New ADOX.Catalog Set idTable = New ADOX.Table Call fuc_ADOX_MDB_Connect(cFolderName, cBookName, cPasWod, idConnStr) idCatalog.ActiveConnection = idConnStr ' idTable.Name = cTablName ' Name der neuen Tabelle idTable.ParentCatalog = idCatalog ' Catalog festlegen Call fuc_ADO_MDB_Create_Table_Field(idTable, cFieldS) Call fuc_ADO_MDB_Create_Table_Index(idTable) idCatalog.Tables.Append idTable ' Table-Objekt dem Catalog-Objekt zuweisen Select Case Err.Number Case Is = -2147217857 On Error Resume Next End Select Set idTable = Nothing Set idCatalog = Nothing End Select fuc_ADO_MDB_Create_Table = Err.Number = 0 End Function ' ----------------------- ADO create Access Table end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ' ' ' ----------------------- ADO create Access Table Field -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private Function fuc_ADO_MDB_Create_Table_Field(ByRef cTable As ADOX.Table, _ ByRef cFieldS As ADODB.Recordset) As Boolean On Error Resume Next Dim idItem As Integer For idItem = 0 To cFieldS.Fields.count - 1 Select Case cFieldS.Fields(idItem).Type Case Is = adWChar cTable.Columns.Append cFieldS.Fields(idItem).Name, cFieldS.Fields(idItem).Type, cFieldS.Fields(idItem).DefinedSize cTable.Columns.item(idItem).Properties("Nullable") = True Case Is = adVarWChar cTable.Columns.Append cFieldS.Fields(idItem).Name, cFieldS.Fields(idItem).Type, cFieldS.Fields(idItem).DefinedSize cTable.Columns.item(idItem).Properties("Nullable") = True Case Is = adDouble cTable.Columns.Append cFieldS.Fields(idItem).Name, cFieldS.Fields(idItem).Type, cFieldS.Fields(idItem).DefinedSize cTable.Columns.item(idItem).Properties("Nullable") = True Case Is = adInteger cTable.Columns.Append cFieldS.Fields(idItem).Name, adInteger Select Case UCase(cFieldS.Fields(idItem).Name) Case Is = UCase("id") cTable.Columns.item(idItem).Properties("Autoincrement") = True Case Else cTable.Columns.item(idItem).Properties("Nullable") = True End Select Case Is = adDBDate cTable.Columns.Append cFieldS.Fields(idItem).Name, adDate cTable.Columns.item(idItem).Properties("Nullable") = True Case Is = adCurrency cTable.Columns.Append cFieldS.Fields(idItem).Name, adCurrency cTable.Columns.item(idItem).Properties("Nullable") = True Case Else Stop End Select Next fuc_ADO_MDB_Create_Table_Field = Err.Number = 0 End Function ' ----------------------- ADO create Access Table Field end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ' ' ' ----------------------- ADO open Access DataBase -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private Function fuc_ADO_MDB_Open_DataBase(ByRef cFolderName As String, _ ByRef cBookName As String, _ ByRef cRecSet As ADODB.Recordset) As Boolean On Error Resume Next Select Case fuc_ADO_MDB_Connect(cFolderName, cBookName, ADO.xMDB.Conn) Case True Set cRecSet = New ADODB.Recordset cRecSet.CursorType = adOpenDynamic cRecSet.LockType = adLockOptimistic Set cRecSet = ADO.xMDB.Conn.OpenSchema(adSchemaTables) Case False Exit Function End Select fuc_ADO_MDB_Open_DataBase = Err.Number = 0 End Function ' ----------------------- ADO open Access DataBase End -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ' ' ' ----------------------- ADO open Access Table -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private Function fuc_ADO_MDB_Open_Table(ByRef cConn As ADODB.Connection, _ ByRef cTableName As String, _ ByRef cColuSele As String, _ ByRef rRecSet As ADODB.Recordset) As Boolean On Error Resume Next Dim idRecSetOpenStr As String Select Case cConn Is Nothing Case False Select Case cColuSele Case Is = "" cColuSele = "*" End Select ' Stop idRecSetOpenStr = "SELECT " & cColuSele & " FROM " & cTableName & "" ' idRecSetOpenStr = "SELECT Point_0X as ingolf FROM " & cTableName & "" Set rRecSet = New ADODB.Recordset rRecSet.CursorType = adOpenDynamic rRecSet.LockType = adLockOptimistic rRecSet.Open idRecSetOpenStr, cConn, adOpenKeyset, adLockOptimistic Case True Exit Function End Select fuc_ADO_MDB_Open_Table = Err.Number = 0 End Function ' ----------------------- ADO open Access Table end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ' ' ' ----------------------- ADO create Access Table Index -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private Function fuc_ADO_MDB_Create_Table_Index(ByRef cTable As ADOX.Table) As Boolean On Error Resume Next Set ADO.xMDB.Index = New ADOX.Index ADO.xMDB.Index.Name = "PrimarayKey" ADO.xMDB.Index.Columns.Append cTable.Columns.item(0).Name ADO.xMDB.Index.PrimaryKey = True ADO.xMDB.Index.Unique = True cTable.Indexes.Append ADO.xMDB.Index Set ADO.xMDB.Index = Nothing fuc_ADO_MDB_Create_Table_Index = Err.Number = 0 End Function ' ----------------------- ADO create Access Table Index end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ' ' ' ----------------------- create RecordSet -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Public Function fuc_Start_RecSet_Ini(ByRef üRecSet As ADODB.Recordset) As Boolean On Error Resume Next Dim idField As ADODB.Field Set üRecSet = New ADODB.Recordset üRecSet.CursorLocation = adUseClient üRecSet.CursorType = adOpenDynamic üRecSet.LockType = adLockOptimistic üRecSet.Fields.Append "ID", adInteger üRecSet.Fields.Append "FirstName", adVarWChar, 20 üRecSet.Fields.Append "SecondName", adVarWChar, 20 üRecSet.Fields.Append "SteetName", adVarWChar, 20 üRecSet.Fields.Append "SteetNumb", adVarWChar, 5 üRecSet.Fields.Append "CityName", adVarWChar, 250 üRecSet.Fields.Append "CityZip", adVarWChar, 5 üRecSet.Fields.Append "Birthday", adDBDate üRecSet.Fields.Append "Number", adInteger üRecSet.Fields.Append "Salary", adCurrency üRecSet.Open fuc_Start_RecSet_Ini = Err.Number = 0 End Function ' ----------------------- create RecordSet end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ' ' ' ----------------------- ADO connect Excel -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private Function fuc_ADO_XLS_Connect(ByRef cFolderName As String, _ ByRef cBookName As String, _ ByRef rConn As ADODB.Connection) As Boolean On Error Resume Next Dim idCommandTimeout As Integer Dim idCursorLocation As String Dim idProvider As String Dim idExteProp As String idCommandTimeout = 5 idCursorLocation = adUseClient idProvider = "Microsoft.Jet.OLEDB.4.0" idExteProp = "Excel 8.0" Dim idFFN As String Dim idFoNa As String Dim idConnStr As String Dim idRecSetOpenStr As String idFoNa = IIf(VBA.Right(cFolderName, 1) = "\", cFolderName, cFolderName & "\") idFFN = idFoNa & cBookName & ".xls" Select Case Dir(idFFN) Case Is <> "" idConnStr = "Data Source=" & idFFN Set rConn = New ADODB.Connection rConn.CommandTimeout = idCommandTimeout rConn.CursorLocation = idCursorLocation ' adUseClient rConn.Provider = idProvider ' "Microsoft.Jet.OLEDB.4.0" rConn.Properties("Extended Properties") = idExteProp ' "Excel 8.0" Call rConn.Open(idConnStr) End Select fuc_ADO_XLS_Connect = Err.Number = 0 End Function ' ----------------------- ADO connect Excel end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ' ' ' ----------------------- ADO open Excel-WorkBook -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private Function fuc_ADO_XLS_Open_DataBase(ByRef cFolderName As String, _ ByRef cBookName As String, _ ByRef cRecSet As ADODB.Recordset) As Boolean On Error Resume Next Select Case fuc_ADO_XLS_Connect(cFolderName, cBookName, ADO.xXLS.Conn) Case True Set cRecSet = New ADODB.Recordset cRecSet.CursorType = adOpenDynamic cRecSet.LockType = adLockOptimistic Set cRecSet = ADO.xXLS.Conn.OpenSchema(adSchemaTables) Case False Exit Function End Select fuc_ADO_XLS_Open_DataBase = Err.Number = 0 End Function ' ----------------------- ADO open Excel-WorkBook end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ' ' ' ----------------------- ADO open Excel-Table -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private Function fuc_ADO_XLS_Open_Table(ByRef cFolderName As String, _ ByRef cBookName As String, _ ByRef cTableName As String, _ ByRef cRecSet As ADODB.Recordset) As Boolean On Error Resume Next Dim idRecSetOpenStr As String Select Case fuc_ADO_XLS_Connect(cFolderName, cBookName, ADO.xXLS.Conn) Case True idRecSetOpenStr = "SELECT * FROM [" & cTableName & "$]" Set cRecSet = New ADODB.Recordset cRecSet.CursorType = adOpenDynamic cRecSet.LockType = adLockOptimistic cRecSet.Open idRecSetOpenStr, ADO.xXLS.Conn, adOpenKeyset, adLockOptimistic Case False Exit Function End Select fuc_ADO_XLS_Open_Table = Err.Number = 0 End Function ' ----------------------- ADO open Excel-Table end -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ' ' ' ----------------------- ADO Start Parametr for Excel Database -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private Function fuc_ADO_XLS_Standard_Value(ByRef rFolderName As String, _ ByRef rBookName As String, _ ByRef rTablName As String, _ ByRef rKeyWord As String) As Boolean On Error Resume Next Dim idFolder As Scripting.Folder Set ADO.xFilSys.FilSys = CreateObject("Scripting.FileSystemObject") rFolderName = "C:\SapWork_V11\IDW1\" rBookName = "IDee_Database" rTablName = "Table_001" rKeyWord = "" Select Case ADO.xFilSys.FilSys.FolderExists(rFolderName) Case False Set idFolder = ADO.xFilSys.FilSys.CreateFolder(rFolderName) End Select fuc_ADO_XLS_Standard_Value = Err.Number = 0 End Function ' ----------------------- ADO Start Parametr for Excel Database -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ' '******************************************************************************************************************************************************************** '************ Start for test Access ******************************************************************************************************************************************************** '******************************************************************************************************************************************************************** Private Sub sub_Start_Access_Open_Create_DataBase() Call fuc_ADO_MDB_Standard_Value(ADO.xSdd.FolderName, ADO.xSdd.BookName, ADO.xSdd.TableName, ADO.xSdd.KeyWord) Select Case ADO.xFilSys.FilSys.FileExists(ADO.xSdd.FolderName & ADO.xSdd.BookName & ".mdb") Case True ADO.xFilSys.FilSys.DeleteFile ADO.xSdd.FolderName & ADO.xSdd.BookName & ".mdb" End Select Call fuc_ADO_MDB_Create_DaBa(ADO.xSdd.FolderName, ADO.xSdd.BookName, ADO.xSdd.KeyWord) End Sub '******************************************************************************************************************************************************************** ' ' '******************************************************************************************************************************************************************** Private Sub sub_Start_Access_Open_Create_Table() Call fuc_ADO_MDB_Standard_Value(ADO.xSdd.FolderName, ADO.xSdd.BookName, ADO.xSdd.TableName, ADO.xSdd.KeyWord) Call fuc_ADO_MDB_Create_DaBa(ADO.xSdd.FolderName, ADO.xSdd.BookName, ADO.xSdd.KeyWord) Stop Call fuc_Start_RecSet_Ini(ADO.xMDB.xDaBaNew.FieldName) Stop Call fuc_ADO_MDB_Create_Table(ADO.xSdd.FolderName, ADO.xSdd.BookName, ADO.xSdd.TableName, ADO.xMDB.xDaBaNew.FieldName, ADO.xSdd.KeyWord) Stop ADO.xMDB.xDaBaNew.FieldName.Close Set ADO.xMDB.xDaBaNew.FieldName = Nothing End Sub '******************************************************************************************************************************************************************** ' ' '******************************************************************************************************************************************************************** Private Sub sub_Start_Access_Open_DataBase() Call fuc_ADO_MDB_Standard_Value(ADO.xSdd.FolderName, ADO.xSdd.BookName, ADO.xSdd.TableName, ADO.xSdd.KeyWord) Call fuc_ADO_MDB_Connect(ADO.xSdd.FolderName, ADO.xSdd.BookName, ADO.xMDB.Conn) Stop Call fuc_ADO_MDB_Open_DataBase(ADO.xSdd.FolderName, ADO.xSdd.BookName, ADO.xMDB.RecSet) Stop ADO.xMDB.RecSet.Close ADO.xMDB.Conn.Close Set ADO.xMDB.RecSet = Nothing Set ADO.xMDB.Conn = Nothing End Sub '******************************************************************************************************************************************************************** ' ' '******************************************************************************************************************************************************************** Private Sub sub_Start_Access_Open_Table() Call fuc_ADO_MDB_Standard_Value(ADO.xSdd.FolderName, ADO.xSdd.BookName, ADO.xSdd.TableName, ADO.xSdd.KeyWord) Call fuc_ADO_MDB_Connect(ADO.xSdd.FolderName, ADO.xSdd.BookName, ADO.xMDB.Conn) Stop Call fuc_ADO_MDB_Open_Table(ADO.xMDB.Conn, ADO.xSdd.TableName, "*", ADO.xMDB.RecSet) Stop ADO.xMDB.RecSet.MoveFirst Do Until ADO.xMDB.RecSet.EOF ADO.xMDB.RecSet.MoveNext Loop ADO.xMDB.RecSet.Close ADO.xMDB.Conn.Close Set ADO.xMDB.RecSet = Nothing Set ADO.xMDB.Conn = Nothing End Sub '******************************************************************************************************************************************************************** '************ Start for test Access end ******************************************************************************************************************************************************** '******************************************************************************************************************************************************************** ' '******************************************************************************************************************************************************************** '************ Start for test Excel ******************************************************************************************************************************************************** '******************************************************************************************************************************************************************** Private Sub sub_Start_Excel_Open_DataBase() Call fuc_ADO_XLS_Standard_Value(ADO.xSdd.FolderName, ADO.xSdd.BookName, ADO.xSdd.TableName, ADO.xSdd.KeyWord) Stop Call fuc_ADO_XLS_Open_DataBase(ADO.xSdd.FolderName, ADO.xSdd.BookName, ADO.xXLS.RecSet) Stop ADO.xXLS.RecSet.Close ADO.xXLS.Conn.Close Set ADO.xXLS.RecSet = Nothing Set ADO.xXLS.Conn = Nothing End Sub '******************************************************************************************************************************************************************** ' ' '******************************************************************************************************************************************************************** Private Sub sub_Start_Excel_Open_Table() Call fuc_ADO_XLS_Standard_Value(ADO.xSdd.FolderName, ADO.xSdd.BookName, ADO.xSdd.TableName, ADO.xSdd.KeyWord) Stop Call fuc_ADO_XLS_Open_Table(ADO.xSdd.FolderName, ADO.xSdd.BookName, ADO.xSdd.TableName, ADO.xXLS.RecSet) Stop ADO.xXLS.RecSet.MoveFirst Do Until ADO.xXLS.RecSet.EOF ADO.xXLS.RecSet.Fields(1).Value ADO.xXLS.RecSet.MoveNext Loop ADO.xXLS.RecSet.Close ADO.xXLS.Conn.Close Set ADO.xXLS.RecSet = Nothing Set ADO.xXLS.Conn = Nothing End Sub '******************************************************************************************************************************************************************** '************ Start for test Excel end ******************************************************************************************************************************************************** '********************************************************************************************************************************************************************