phpbar.de logo

Mailinglisten-Archive

AW: Datenimport aus Access

AW: Datenimport aus Access

Denis Mettler mysql_(at)_lists.phpcenter.de
Fri, 11 May 2001 13:55:22 +0200


This is a multi-part message in MIME format.

------=_NextPart_000_0006_01C0DA22.05721640
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

Hallo Ahmed,

Anbei uebersende ich Dir ein Script.
Die Anleitung zur Nutzung findest du im Script selbst.

Das Script bewerkstelligt das konvertieren von MS-Access 2000 Datenbanken
nach MySQL.
Es erstellt einen Dump,
den du dann am besten mit MyPHPAdmin einliest.

Ich hoffe das hilft Dir weiter. Ob es das Datums Problem loest kann ich Dir
leider so auf die Schnelle nicht sagen.

Beste Gruesse
Denis

--
Unix is an operating system, OS/2 is half an operating system, Windows
is a shell, and DOS is a boot partition virus.
-- Peter H. Coffin

> Ich möchte Daten von eine Tabelle (Bestellung von Nordwind-DB-Access)
> importieren, das Problem die Access-Daten werden im dd-mm-yyyy
> Format gespeichert,
> und bei MySQL-Daten, werden die im yyyy-mm-dd Format gespeichert.
> damit nicht zu Probleme führt, wie kann ich das Problem lösen ? mindesten
> von Access Seite.


------=_NextPart_000_0006_01C0DA22.05721640
Content-Type: text/plain;
	name="convert_access2k_mysql.txt"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="convert_access2k_mysql.txt"

'Exports the database contents into a file in mysql format
    'IS NOT SELECTIVE! (exports ALL tables)
   =20
    'INSTRUCTIONS
   =20
    'Paste this function into a Microsoft Access module of a database =
that has the
    'tables you want to export. Create a macro with the function RunCode =
and the
    'argument export_mysql (). Run the macro to start the export.
   =20
    'Access 2000
    '------------
    'Under Tools, References ensure you have the following selected:
    'Visual Basic for Applications
    'Microsoft Access 9.0 Object Library
    'Microsoft DAO 3.6 Object Library
    'OLE Automation
    'Microsoft Visual Basic for Applications Extensibility 5.3
   =20
    '*** Unselect ActiveX Data Objects references!!!
   =20
   =20
    Dim dbase As Database, tdef As Recordset, i As Integer, fd As =
Integer, tname As String, j As Integer, iname As String
    Dim s As String, found As Integer, stuff As String, idx As Index, k =
As Integer, f As Integer, fld As Field, istuff As String

    Set dbase =3D CurrentDb()
   =20
    'Open the file to export the defintions and data to. Change this to =
suit your needs ****
   =20
    Open "c:\temp\dump.txt" For Output As #1

    Print #1, "# Converted from MS Access to mysql "
    Print #1, "# by Brian Andrews, (c) InforMate (www.informate.co.nz), =
brian_(at)_informate.co.nz, 1997-2000"
    Print #1, ""

    'Go through the table definitions


    For i =3D 0 To dbase.TableDefs.Count - 1
   =20
        =20
        ' Let's take only the visible tables
       =20
        If ((dbase.TableDefs(i).Attributes And DB_SYSTEMOBJECT) Or =
(dbase.TableDefs(i).Attributes And DB_HIDDENOBJECT)) Then
       =20
        Else
           =20
            ' We DROP the table if it already exists
            ' and then create it again
           =20
                    tname =3D "" & dbase.TableDefs(i).Name
                   =20
                       'remove spaces from tablename
           =20
                        For j =3D 1 To Len(tname)

                        If j < Len(tname) Then

                        If Mid$(tname, j, 1) =3D " " Then


                        s =3D Left$(tname, j - 1)
                        s =3D s & "" & Right$(tname, Len(tname) - j)
                        j =3D j + 1
                        found =3D True
                        tname =3D s

                        End If
                        End If

                        Next j
           =20
            'restrict tablename to 19 chars
           =20
            tname =3D Left$(tname, 19)
           =20
           =20
            'comment out these lines if the table doesn't exist or else =
create it first
           =20
            Print #1, ""
            Print #1, ""
            Print #1, "DROP TABLE IF EXISTS " & tname & ";"
           =20
           =20
            Print #1,
            Print #1, "CREATE TABLE " & tname & " ("
           =20
         =20
            ' Step through all the fields in the table
           =20
            For fd =3D 0 To dbase.TableDefs(i).Fields.Count - 1
           =20
                       =20
                Dim tyyppi As String, pituus As Integer, comma As String
                Select Case dbase.TableDefs(i).Fields(fd).Type
                    Case DB_BOOLEAN
                        tyyppi =3D "SMALLINT"
                    Case DB_INTEGER
                        tyyppi =3D "SMALLINT"
                    Case DB_BYTE
                        tyyppi =3D "TINYBLOB"
                    Case DB_LONG
                        If dbase.TableDefs(i).Fields(fd).Attributes =3D =
17 Then
                             tyyppi =3D "INT AUTO_INCREMENT"
                        Else
                            tyyppi =3D "INT"
                        End If
                    Case DB_DOUBLE
                        tyyppi =3D "DOUBLE"
                    Case DB_SINGLE '
                        tyyppi =3D "REAL"
                    Case DB_CURRENCY
                        tyyppi =3D "DOUBLE (8,4)"
                    Case DB_TEXT
                         pituus =3D dbase.TableDefs(i).Fields(fd).Size
                         tyyppi =3D "CHAR (" & pituus & ")"
                    Case dbAutoIncrField
                       ' tyyppi =3D "INT NOT NULL AUTO_INCREMENT"
                   =20
                    'Access Date fields are set as the mysql date type - =
you can change this to
                    'DATETIME if you prefer.
                   =20
                    Case DB_DATE
                         tyyppi =3D "DATE"
                    Case DB_MEMO, DB_LONGBINARY
                         tyyppi =3D "BLOB"
                                    =20
                End Select
               =20
           =20
                'Print the field definition
                   =20
                'remove spaces from fieldname
               =20
                       stuff =3D "" & dbase.TableDefs(i).Fields(fd).Name
               =20
                'we had a table called Index which mysql doesn't like
               =20
                        If stuff =3D "Index" Then stuff =3D "Indexm"
                       =20
                        For j =3D 1 To Len(stuff)

                        If j < Len(stuff) Then

                        If Mid$(stuff, j, 1) =3D " " Then


                        s =3D Left$(stuff, j - 1)
                        s =3D s & "" & Right$(stuff, Len(stuff) - j)
                        j =3D j + 1
                        found =3D True
                        stuff =3D s

                        End If
                        End If

                        Next j
              =20
               stuff =3D Left$(stuff, 19)
              =20
               'not null
               k =3D 0
                             =20
               For Each idx In dbase.TableDefs(i).Indexes
                    If (dbase.TableDefs(i).Indexes(k).Fields(0).Name =3D =
dbase.TableDefs(i).Fields(fd).Name) Then
                        tyyppi =3D tyyppi & " NOT NULL"
                        Exit For
                    End If
               k =3D k + 1
               Next
              =20
                'default value
               =20
                If (Not =
(IsNull(dbase.TableDefs(i).Fields(fd).DefaultValue)) And =
dbase.TableDefs(i).Fields(fd).DefaultValue <> "") Then
                   =20
                    If dbase.TableDefs(i).Fields(fd).Required =3D False =
Then
                        tyyppi =3D tyyppi & " NOT NULL "
                    End If
                   =20
                    If Left$(dbase.TableDefs(i).Fields(fd).DefaultValue, =
1) =3D Chr(34) Then
                        tyyppi =3D tyyppi & " DEFAULT '" & =
Mid$(dbase.TableDefs(i).Fields(fd).DefaultValue, 2, =
Len(dbase.TableDefs(i).Fields(fd).DefaultValue) - 2) & "'"
                    Else
                        tyyppi =3D tyyppi & " DEFAULT " & =
dbase.TableDefs(i).Fields(fd).DefaultValue
                    End If
                   =20
                End If
               =20
            'print out field info
                comma =3D ","
               =20
                If fd =3D dbase.TableDefs(i).Fields.Count - 1 Then
               =20
                    If dbase.TableDefs(i).Indexes.Count =3D 0 Then
                        comma =3D ""
                    Else
                        comma =3D ","
                    End If
                End If
               =20
                Print #1, "     " & stuff & " " & tyyppi & comma
           =20
            Next fd
                 =20
               =20
            'primary key and other index declaration
              =20
               k =3D 0
              =20
              =20
               For Each idx In dbase.TableDefs(i).Indexes
           =20
            'Check Primary property
           =20
               k =3D k + 1
              =20
                If idx.Primary Then
                    istuff =3D "     PRIMARY KEY ("
                Else
                    istuff =3D "     KEY ("
                End If
               =20
                    f =3D 0
                   =20
                    For Each fld In idx.Fields
                        f =3D f + 1
                        iname =3D fld.Name
                       =20
                        For j =3D 1 To Len(iname)

                        If j < Len(iname) Then

                        If Mid$(iname, j, 1) =3D " " Then


                        s =3D Left$(iname, j - 1)
                        s =3D s & "" & Right$(iname, Len(iname) - j)
                        j =3D j + 1
                        found =3D True
                        iname =3D s

                        End If
                        End If

                        Next j
                       =20
                        istuff =3D istuff & iname
                       =20
                        If f < idx.Fields.Count Then
                            istuff =3D istuff & ","
                        End If
                       =20
                    Next fld
                   =20
                    If k < dbase.TableDefs(i).Indexes.Count Then
                   =20
                        Print #1, istuff & "),"
                    Else
                        Print #1, istuff & ")"
                                         =20
                    End If
                   =20
               =20
                Next idx
   =20
                                         =20
               =20
            Print #1, ");"
            Print #1, ""
       =20
              =20
            Dim recset As Recordset
            Dim row As String, it As String
            Dim is_string As String, reccount As Integer, x As Integer
           =20
            Set recset =3D dbase.OpenRecordset(dbase.TableDefs(i).Name)
           =20
            reccount =3D recset.RecordCount
           =20
           =20
            If reccount <> 0 Then
           =20
            ' Step through the rows in the table
           =20
            recset.MoveFirst
            Do Until recset.EOF
                =20
                row =3D "INSERT INTO " & tname & " VALUES ("
               =20
                ' Go through the fields in the row
               =20
                For fd =3D 0 To recset.Fields.Count - 1
                          =20
                    is_string =3D ""
                    stuff =3D "" & recset.Fields(fd).Value
                   =20
                    Select Case recset.Fields(fd).Type
                    Case DB_BOOLEAN
                       =20
                        'true fields are set to 1, false are set to 0
                       =20
                        If recset.Fields(fd).Value =3D True Then
                            stuff =3D "0"
                        Else
                            stuff =3D "1"
                        End If
                       =20
                    Case DB_TEXT, DB_MEMO, 15, DB_LONGBINARY
                        is_string =3D "'"
                    Case DB_DATE
                        is_string =3D "'"
                       =20
                        'format date fields to YYYY-MM-DD. You may want =
to add time formatting as
                        'well if you have declared DATE fields as =
DATETIME
                       =20
                        If stuff <> "" And Not (IsNull(stuff)) Then
                            stuff =3D Format(stuff, "YYYY-MM-DD")
                        End If
                    Case Else
                       =20
                        'default empty number fields to 0 - comment this =
out if you want
                       =20
                        If stuff =3D "" Then
                            stuff =3D "0"
                        End If
                    End Select
                                                                         =
=20
              '**** escape single quotes

                    x =3D InStr(stuff, "'")
                   =20
                    While x <> 0
                        s =3D Left$(stuff, x - 1)
                        s =3D s & "\" & Right$(stuff, Len(stuff) - x + =
1)
                        stuff =3D s
                        x =3D InStr(x + 2, stuff, "'")
                    Wend
                   =20
                 '**** convert returns to <br>'s
                =20
                 x =3D InStr(stuff, Chr(13))
                   =20
                    While x <> 0
                        s =3D Left$(stuff, x - 1)
                        If x =3D Len(stuff) Then
                            s =3D s & "<br>"
                        Else
                            s =3D s & "<br>" & Right$(stuff, Len(stuff) =
- x - 1)
                        End If
                       =20
                        stuff =3D s
                        x =3D InStr(x + 2, stuff, Chr(13))
                    Wend
                   =20
                    row =3D row & is_string & stuff & is_string
                   =20
                    If fd < recset.Fields.Count - 1 Then
                        row =3D row & ","
                    End If
                Next fd
               =20
                ' Add trailers and print
               =20
                row =3D row & ");"
                Print #1, row
               =20
                ' Move to the next row
               =20
                recset.MoveNext
            Loop
       =20
            recset.Close
            Set recset =3D Nothing
       =20
        End If
    End If
    Next i
   =20
 =20
   =20
    Close #1
   =20
    dbase.Close
    Set dbase =3D Nothing

End Function
------=_NextPart_000_0006_01C0DA22.05721640--

---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive