phpbar.de logo

Mailinglisten-Archive

[php] Access to MyOdbc to MySql Ausgabe PHP nix

[php] Access to MyOdbc to MySql Ausgabe PHP nix

Wolfgang Hauck wbh_(at)_euta.net
Fri, 28 Jul 2000 10:28:47 +0200


------ =_NextPart_000_01BFF87E.9D3AAFE0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit

     
> 
> Ich habe mit Access97 und den MyODBC Treibern eine Access 
> Tabelle (kbf) auf die MySQL DB vom Server exportiert. 
> Exportieren und Importieren klappt insofern mit Access 
> (leider nur mit 97.... :-( - btw gibt es fuer 2000 eine 
> Export Loesung??) ganz wunderbar. 

>>Eine alternative Methode zum Export, der auch in Access 2000 
>>hervorragend klappt: 
>>Unter folgender Adresse 
>>http://www.mysql.com/downloads/contrib.html
>>gibt es ein Skript namens importsql.txt, das man ohne gro?en Aufwand 
>>als Modul in Access einbaut. Bei Aufruf schreibt das Modul dann alle 

Hi Christoph,

 
Hier ein Modul von cynergi.net das in Access 95 - 2000 eingebunden werden kann.
Rennt bei kleinen Datenbanken recht gut, wenns um grosse Datenbanken geht ;-(

Gruss Wolfgang

-- 
** Durchgehend geoffnet: http://www.php-center.de **
Die PHP-Liste: mailto:php_(at)_php-center.de
http://infosoc.uni-koeln.de/mailman/listinfo/php


------ =_NextPart_000_01BFF87E.9D3AAFE0
Content-Type: text/plain; name="export.txt"
Content-Transfer-Encoding: quoted-printable

Option Compare Database
Option Explicit

Private Const DB_ENGINE As String =3D "MY"  ' USE ONLY "M1" (mSQL v1), =
"M2" (mSQL v2) or "MY" (MySQL)
Private Const DB_NAME As String =3D ""  ' Use empty string for current. =
Else use filename or DSN name of database to export
Private Const DB_CONNECT As String =3D ""  ' Used only if above string =
is not empty
Private Const MSQL_64kb_AVG As Long =3D 2048  ' ALWAYS < 65536 (to be =
consistent with MS Access). Set to max expected size of Access MEMO =
field (to preserve space in mSQL v1)
Private Const WS_REPLACEMENT As String =3D "_"  ' Use "" to simply eat =
whitespaces in identifiers (table and field names)
Private Const IDENT_MAX_SIZE As Integer =3D 19  ' Suggest 64. Max size =
of identifiers (table and field names)
Private Const PREFIX_ON_KEYWORD As String =3D "_"  ' Prefix to add to =
identifier, if it is a reserved word
Private Const SUFFIX_ON_KEYWORD As String =3D ""  ' Suffix to add to =
identifier, if it is a reserved word
Private Const PREFIX_ON_INDEX As String =3D "ix"  ' Prefix to add to =
index identifier, to make it unique (mSQL v2)
Private Const SUFFIX_ON_INDEX As String =3D ""  ' Suffix to add to index =
identifier, to make it unique (mSQL v2)
Private Const ADD_SQL_FILE As String =3D "c:\temp\esql_add.txt"  ' Use =
empty if open on #1. Will be overwritten if exists!
Private Const DEL_SQL_FILE As String =3D "c:\temp\esql_del.txt"  ' Use =
empty if open on #2. Will be overwritten if exists!
Private Const LINE_BREAK As String =3D "\n"  ' Try "<br>". String to =
replace line breaks in text fields
Private Const QUERY_SEPARATOR As String =3D "\g"  ' Terminator/separator =
of SQL queries (to instruct some monitor program to execute them)
Private Const COMMENT_PREFIX As String =3D "#"  ' Use empty string for =
no comments
Private Const DISPLAY_WARNINGS As Boolean =3D True  ' False to output =
the warnings to the files, only
Private Const DATE_AS_STR As Boolean =3D True  ' False to use real =
number data type for date, time and timestamp (in mSQL only)
Private Const PARA_INSERT_AFTER As Integer =3D 3  ' Field count after =
which print INSERTs different lines
Private Const INDENT_SIZE As Integer =3D 5  ' Number of spaces on =
indents


' Global var to store inter-funtion data
Private warnings As String  ' Not an option: do not set in any way


' Primary Export Function

Sub exportsql()
On Error GoTo exportSQL_error

    Dim cdb As Database
    Dim ctableix As Integer, ctablename As String

    If DB_NAME =3D "" Then
        Set cdb =3D CurrentDb()
    Else
        Set cdb =3D OpenDatabase(DB_NAME, False, True, DB_CONNECT) ' =
Shared, read-only
    End If
   =20
    If ADD_SQL_FILE <> "" Then Open ADD_SQL_FILE For Output As #1
    If DEL_SQL_FILE <> "" Then Open DEL_SQL_FILE For Output As #2

    DoCmd.Hourglass True

    If COMMENT_PREFIX <> "" Then
        Print #1, COMMENT_PREFIX & " Exported from MS Access to " & =
IIf(Left$(DB_ENGINE, 2) =3D "MY", "MySQL", "mSQL")
        Print #1, COMMENT_PREFIX & " (C) 1997-98 CYNERGI - =
www.cynergi.net, info_(at)_cynergi.net"
        Print #1,
   =20
        Print #2, COMMENT_PREFIX & " Exported from MS Access to " & =
IIf(Left$(DB_ENGINE, 2) =3D "MY", "MySQL", "mSQL")
        Print #2, COMMENT_PREFIX & " (C) 1997-98 CYNERGI - =
www.cynergi.net, info_(at)_cynergi.net"
        Print #2,
    End If

    'Go through the table definitions
    For ctableix =3D 0 To cdb.TableDefs.Count - 1
   =20
        Dim cfieldix As Integer, cfieldname As String
        Dim fieldlst As String, sqlcode As String
        Dim primary_found As Boolean
        Dim crs As Recordset
   =20
        ' Let's take only the visible tables
        If (((cdb.TableDefs(ctableix).Attributes And DB_SYSTEMOBJECT) Or =
_
        (cdb.TableDefs(ctableix).Attributes And DB_HIDDENOBJECT))) =3D 0 =
Then
           =20
            ctablename =3D conv_name("" & cdb.TableDefs(ctableix).Name)
           =20
            Print #2,
            Print #2, "DROP TABLE " & ctablename & QUERY_SEPARATOR
           =20
            ' CREATE clause
            Print #1,
            Print #1, "CREATE TABLE " & ctablename
            Print #1, Space$(INDENT_SIZE) & "("
           =20
            warnings =3D ""
            fieldlst =3D ""
            primary_found =3D False
           =20
            ' loop thorugh each field in the table
            For cfieldix =3D 0 To cdb.TableDefs(ctableix).Fields.Count - =
1
               =20
                Dim typestr As String, fieldsz As Integer, dvstr As =
String
                Dim found_ix As Boolean, cindex As index, cfield As =
Field
               =20
                ' if this is not the first iteration, add separators
                If fieldlst <> "" Then
                    fieldlst =3D fieldlst & ", "
                    Print #1, ","
                End If
               =20
                ' get field name
                cfieldname =3D conv_name("" & =
cdb.TableDefs(ctableix).Fields(cfieldix).Name)
                fieldlst =3D fieldlst & cfieldname
               =20
                ' translate types
                If DB_ENGINE =3D "M1" Or DB_ENGINE =3D "M2" Then
                    Select Case =
cdb.TableDefs(ctableix).Fields(cfieldix).Type
                        Case dbChar
                            typestr =3D "CHAR(" & =
cdb.TableDefs(ctableix).Fields(cfieldix).Size & ")"
                        Case dbText
                            fieldsz =3D =
cdb.TableDefs(ctableix).Fields(cfieldix).Size
                            If fieldsz =3D 0 Then fieldsz =3D 255
                            typestr =3D "CHAR(" & fieldsz & ")"
                        Case dbBoolean, dbByte, dbInteger, dbLong
                            typestr =3D "INT"
                        Case dbDouble, dbFloat, dbSingle
                            typestr =3D "REAL"
                        Case dbCurrency, dbDecimal, dbNumeric
                            typestr =3D "REAL"
                            warn "In new field '" & cfieldname & "', =
currency/BCD will be converted to REAL - there may be precision loss!", =
False
                        Case dbDate
                            typestr =3D IIf(DATE_AS_STR, "CHAR(19)", =
"REAL") ' use Access internal format: IEEE 64-bit (8-byte) FP
                            warn "In new field '" & cfieldname & "', =
date/time/timestamp will be converted to " & typestr & ".", False
                        Case dbTime
                            typestr =3D IIf(DATE_AS_STR, "CHAR(8)", =
"REAL") ' use Access internal format: IEEE 64-bit (8-byte) FP
                            warn "In new field '" & cfieldname & "', =
date/time/timestamp will be converted to " & typestr & ".", False
                        Case dbTimeStamp
                            typestr =3D IIf(DATE_AS_STR, "CHAR(19)", =
"REAL") ' use Access internal format: IEEE 64-bit (8-byte) FP
                            warn "In new field '" & cfieldname & "', =
date/time/timestamp will be converted to " & typestr & "." & =
IIf(DB_ENGINE =3D "M2", " Consider using pseudo field '_timestamp'.", =
""), False
                        Case dbMemo
                            If DB_ENGINE =3D "M2" Then
                                typestr =3D "TEXT(" & MSQL_64kb_AVG & =
")"
                            Else
                                typestr =3D "CHAR(" & MSQL_64kb_AVG & =
")"
                                warn "In new field '" & cfieldname & "', =
dbMemo is not supported by mSQL v1 - fields larger than MSQL_64kb_AVG (" =
& MSQL_64kb_AVG & ") will not be accepted!", False
                            End If
                        Case dbBinary, dbVarBinary
                            typestr =3D "CHAR(255)"
                            warn "In new field '" & cfieldname & "', =
dbBinary and dbVarBinary are not supported by mSQL! - will use a text =
(CHAR(255)) field.", True
                        Case dbLongBinary
                            typestr =3D "CHAR(" & MSQL_64kb_AVG & ")"
                            warn "In new field '" & cfieldname & "', =
dbLongBinary is not supported by mSQL! - will use a text (CHAR(" & =
MSQL_64kb_AVG & ")) field.", True
                        Case Else
                            warn "In new field '" & cfieldname & "', =
dbBigInt and dbGUID are not currently supported!", True
                            Error 5  ' invalid Procedure Call
                    End Select
                Else
                    Select Case =
cdb.TableDefs(ctableix).Fields(cfieldix).Type
                        Case dbBinary
                            typestr =3D "TINYBLOB"
                        Case dbBoolean
                            typestr =3D "TINYINT"
                        Case dbByte
                            typestr =3D "TINYINT UNSIGNED"
                        Case dbChar
                            typestr =3D "CHAR(" & =
cdb.TableDefs(ctableix).Fields(cfieldix).Size & ")"
                        Case dbCurrency
                            typestr =3D "DECIMAL(20,4)"
                        Case dbDate
                            typestr =3D "DATETIME"
                        Case dbDecimal
                            typestr =3D "DECIMAL(20,4)"
                        Case dbDouble
                            typestr =3D "REAL"
                        Case dbFloat
                            typestr =3D "REAL"
                        Case dbInteger
                            typestr =3D "SMALLINT"
                        Case dbLong
                            typestr =3D "INT"
                        Case dbLongBinary
                            typestr =3D "LONGBLOB"
                        Case dbMemo
                            typestr =3D "LONGBLOB"  ' !!!!! MySQL bug! =
Replace by LONGTEXT when corrected!
                        Case dbNumeric
                            typestr =3D "DECIMAL(20,4)"
                        Case dbSingle
                            typestr =3D "FLOAT"
                        Case dbText
                            fieldsz =3D =
cdb.TableDefs(ctableix).Fields(cfieldix).Size
                            If fieldsz =3D 0 Then fieldsz =3D 255
                            typestr =3D "CHAR(" & fieldsz & ")"
                        Case dbTime
                            typestr =3D "TIME"
                        Case dbTimeStamp
                            typestr =3D "TIMESTAMP"
                        Case dbVarBinary
                            typestr =3D "TINYBLOB"
                        Case dbBigInt, dbGUID
                            warn "In new field '" & cfieldname & "', =
dbBigInt and dbGUID are not currently supported!", True
                            Error 5  ' invalid Procedure Call
                        Case Else
                            typestr =3D "LONGBLOB"
                    End Select
                End If
               =20
                ' check not null and auto-increment properties
                If ((cdb.TableDefs(ctableix).Fields(cfieldix).Attributes =
And dbAutoIncrField) <> 0) Then
                    If Left$(DB_ENGINE, 2) =3D "MY" Then
                        typestr =3D typestr & " NOT NULL AUTO_INCREMENT"
                    Else
                        typestr =3D typestr & " NOT NULL"
                        warn "In new field '" & cfieldname & "', mSQL =
does not support auto-increment fields! - they will be pure INTs." & =
IIf(DB_ENGINE =3D "M2", " Consider using pseudo field '_rowid' or =
SEQUENCEs.", ""), False
                    End If
                ElseIf cdb.TableDefs(ctableix).Fields(cfieldix).Required =
=3D True Then
                    typestr =3D typestr & " NOT NULL"
                End If
                   =20
                ' default value
                dvstr =3D =
cdb.TableDefs(ctableix).Fields(cfieldix).DefaultValue
                If dvstr <> "" Then
                    If Left$(DB_ENGINE, 2) <> "MY" Then
                        warn "In new field '" & cfieldname & "', mSQL =
does not support default values! - they won't be initialised.", False
                    ElseIf =
cdb.TableDefs(ctableix).Fields(cfieldix).Required =3D False Then
                        warn "In new field '" & cfieldname & "', MySQL =
needs NOT NULL to support default values! - it won't be set a default.", =
False
                    ElseIf Left$(dvstr, 1) =3D """" Then
                        typestr =3D typestr & " DEFAULT '" & =
conv_str(Mid$(dvstr, 2, Len(dvstr) - 2)) & "'"
                    ElseIf ((LCase(dvstr) =3D "now()" Or LCase(dvstr) =
=3D "date()" Or LCase(dvstr) =3D "time()") And _
                    (Left$(typestr, 5) =3D "DATE " Or Left$(typestr, 5) =
=3D "TIME " Or Left$(typestr, 9) =3D "DATETIME ")) Then
                        typestr =3D "TIMESTAMP " & Right$(typestr, =
Len(typestr) - InStr(typestr, " "))
                    ElseIf LCase(dvstr) =3D "no" Then
                        typestr =3D typestr & " DEFAULT 0"
                    ElseIf LCase(dvstr) =3D "yes" Then
                        typestr =3D typestr & " DEFAULT 1"
                    Else
                        typestr =3D typestr & " DEFAULT " & dvstr
                    End If
                End If
               =20
                ' check if primary key (for mSQL v1)
                If DB_ENGINE =3D "M1" Then
                    found_ix =3D False
                    For Each cindex In cdb.TableDefs(ctableix).Indexes
                        If cindex.Primary Then
                            For Each cfield In cindex.Fields
                                If cfield.Name =3D =
cdb.TableDefs(ctableix).Fields(cfieldix).Name Then
                                    found_ix =3D True
                                    Exit For
                                End If
                            Next cfield
                            If found_ix Then Exit For
                        End If
                    Next cindex
                    If found_ix Then
                        If primary_found Then
                            warn "On new table '" & ctablename & "', =
mSQL v1 does not support more than one PRIMARY KEY! Only first key was =
set.", False
                        Else
                            typestr =3D typestr & " PRIMARY KEY"
                            primary_found =3D True
                        End If
                    End If
                End If
               =20
                'print out field info
                Print #1, Space$(INDENT_SIZE) & cfieldname & =
Space$(IDENT_MAX_SIZE - Len(cfieldname) + 2) & typestr;
           =20
            Next cfieldix
                 =20
            ' terminate CREATE clause
            If DB_ENGINE =3D "M2" Then
                Print #1,
                Print #1, Space$(INDENT_SIZE) & ")" & QUERY_SEPARATOR
            End If
                 =20
            ' primary key and other index declaration
            If DB_ENGINE =3D "M2" Or Left$(DB_ENGINE, 2) =3D "MY" Then
                For Each cindex In cdb.TableDefs(ctableix).Indexes
                    sqlcode =3D ""
                    For Each cfield In cindex.Fields
                        sqlcode =3D sqlcode & IIf(sqlcode =3D "", "", ", =
") & conv_name(cfield.Name)
                    Next cfield
                    If DB_ENGINE =3D "M2" Then
                        Print #1, "CREATE " & IIf(cindex.unique, "UNIQUE =
", "") & "INDEX " & _
                        conv_name(PREFIX_ON_INDEX & cindex.Name & =
SUFFIX_ON_INDEX) & " ON " & _
                        ctablename & " (" & sqlcode & ")" & =
QUERY_SEPARATOR
                    Else
                        Print #1, ","
                        Print #1, Space$(INDENT_SIZE) & =
IIf(cindex.Primary, "PRIMARY ", "") & _
                        "KEY (" & sqlcode & ")";
                    End If
                Next cindex
            End If
           =20
            ' terminate CREATE clause
            If DB_ENGINE <> "M2" Then
                Print #1,
                Print #1, Space$(INDENT_SIZE) & ")" & QUERY_SEPARATOR
            End If

            ' print any warnings bellow it
            If COMMENT_PREFIX <> "" And warnings <> "" Then
                If DB_ENGINE =3D "M2" Then Print #1, COMMENT_PREFIX & " =
"
                Print #1, warnings
                warnings =3D ""
            End If
           =20
            Print #1,
           =20
            ' INSERT clause
            Set crs =3D cdb.OpenRecordset(cdb.TableDefs(ctableix).Name)
            If crs.RecordCount <> 0 Then
               =20
                ' loop thorugh each record in the table
                crs.MoveFirst
                Do Until crs.EOF
                   =20
                    ' start paragraphing
                    sqlcode =3D "INSERT INTO " & ctablename
                    If crs.Fields.Count > PARA_INSERT_AFTER Then
                        Print #1, sqlcode
                        If DB_ENGINE =3D "M1" Then Print #1, =
Space$(INDENT_SIZE) & "(" & fieldlst & ")"
                        Print #1, "VALUES ("
                        sqlcode =3D Space$(INDENT_SIZE)
                    Else
                        If DB_ENGINE =3D "M1" Then sqlcode =3D sqlcode & =
" (" & fieldlst & ")"
                        sqlcode =3D sqlcode & " VALUES ("
                    End If
                   =20
                    ' loop through each field in each record
                    For cfieldix =3D 0 To crs.Fields.Count - 1
                   =20
                        ' based on type, prepare the field value
                        If IsNull(crs.Fields(cfieldix).Value) Then
                            sqlcode =3D sqlcode & "NULL"
                        Else
                            Select Case crs.Fields(cfieldix).Type
                                Case dbBoolean
                                    sqlcode =3D sqlcode & =
IIf(crs.Fields(cfieldix).Value =3D True, "1", "0")
                                Case dbChar, dbText, dbMemo
                                    sqlcode =3D sqlcode & "'" & =
conv_str(crs.Fields(cfieldix).Value) & "'"
                                Case dbDate, dbTimeStamp
                                    If Left$(DB_ENGINE, 2) =3D "MY" Or =
DATE_AS_STR Then
                                        sqlcode =3D sqlcode & "'" & =
Format(crs.Fields(cfieldix).Value, "YYYY-MM-DD HH:MM:SS") & "'"
                                    Else
                                        'print in Access internal =
format: IEEE 64-bit (8-byte) FP
                                        sqlcode =3D sqlcode & "'" & =
Format(crs.Fields(cfieldix).Value, "#.#########") & "'"
                                    End If
                                Case dbTime
                                    If Left$(DB_ENGINE, 2) =3D "MY" Or =
DATE_AS_STR Then
                                        sqlcode =3D sqlcode & "'" & =
Format(crs.Fields(cfieldix).Value, "HH:MM:SS") & "'"
                                    Else
                                        'print in Access internal =
format: IEEE 64-bit (8-byte) FP
                                        sqlcode =3D sqlcode & "'" & =
Format(crs.Fields(cfieldix).Value, "#.#########") & "'"
                                    End If
                                Case dbBinary, dbLongBinary, dbVarBinary
                                    sqlcode =3D sqlcode & "'" & =
conv_bin(crs.Fields(cfieldix).Value) & "'"
                                Case Else
                                    sqlcode =3D sqlcode & =
conv_str(crs.Fields(cfieldix).Value)
                            End Select
                        End If
                       =20
                        ' paragraph separators
                        If cfieldix < crs.Fields.Count - 1 Then
                            sqlcode =3D sqlcode & ", "
                            If crs.Fields.Count > PARA_INSERT_AFTER Then
                                Print #1, sqlcode
                                sqlcode =3D Space$(INDENT_SIZE)
                            End If
                        End If
                       =20
                    Next cfieldix
                   =20
                    ' print out result and any warnings
                    sqlcode =3D sqlcode & IIf(crs.Fields.Count > =
PARA_INSERT_AFTER, " )", ")") & QUERY_SEPARATOR
                    Print #1, sqlcode
                    If COMMENT_PREFIX <> "" And warnings <> "" Then
                        Print #1, warnings
                        warnings =3D ""
                    End If
                    If crs.Fields.Count > PARA_INSERT_AFTER Then Print =
#1,
                   =20
                    crs.MoveNext
                Loop
               =20
            Else
               =20
                ' if there is no data on the table
                If COMMENT_PREFIX <> "" Then Print #1, COMMENT_PREFIX & =
" This table has no data"
           =20
            End If
           =20
            crs.close
            Set crs =3D Nothing
       =20
        End If  'print only unhidden tables
   =20
    Next ctableix
   =20
exportSQL_exit:
    Close #2
    Close #1
   =20
    cdb.close
    Set cdb =3D Nothing

    DoCmd.Hourglass False

    Exit Sub

exportSQL_error:
    MsgBox Err.Description
    Resume exportSQL_exit

End Sub


Private Function conv_name(strname As String) As String
    Dim I As Integer, str As String

    ' replace inner spaces with WS_REPLACEMENT
    str =3D strname
    I =3D 1
    While I <=3D Len(str)
        Select Case Mid$(str, I, 1)
            Case " ", Chr$(9), Chr$(10), Chr$(13)  ' space, tab, =
newline, carriage return
                str =3D Left$(str, I - 1) & WS_REPLACEMENT & Right$(str, =
Len(str) - I)
                I =3D I + Len(WS_REPLACEMENT)
            Case Else
                I =3D I + 1
        End Select
    Wend
    ' restrict tablename to IDENT_MAX_SIZE chars, *after* eating spaces
    str =3D Left$(str, IDENT_MAX_SIZE)
    ' check for reserved words
    conv_name =3D str
    If Left$(DB_ENGINE, 2) =3D "MY" Then
        Select Case LCase$(str)
            Case "add", "all", "alter", "and", "as", "asc", =
"auto_increment", "between", _
            "bigint", "binary", "blob", "both", "by", "cascade", "char", =
"character", _
            "change", "check", "column", "columns", "create", "data", =
"datetime", "dec", _
            "decimal", "default", "delete", "desc", "describe", =
"distinct", "double", _
            "drop", "escaped", "enclosed", "explain", "fields", "float", =
"float4", _
            "float8", "foreign", "from", "for", "full", "grant", =
"group", "having", _
            "ignore", "in", "index", "infile", "insert", "int", =
"integer", "interval", _
            "int1", "int2", "int3", "int4", "int8", "into", "is", "key", =
"keys", _
            "leading", "like", "lines", "limit", "lock", "load", "long", =
"longblob", _
            "longtext", "match", "mediumblob", "mediumtext", =
"mediumint", "middleint", _
            "numeric", "not", "null", "on", "option", "optionally", =
"or", "order", _
            "outfile", "partial", "precision", "primary", "procedure", =
"privileges", _
            "read", "real", "references", "regexp", "repeat", "replace", =
"restrict", _
            "rlike", "select", "set", "show", "smallint", =
"sql_big_tables", _
            "sql_big_selects", "sql_select_limit", "straight_join", =
"table", "tables", _
            "terminated", "tinyblob", "tinytext", "tinyint", "trailing", =
"to", "unique", _
            "unlock", "unsigned", "update", "usage", "values", =
"varchar", "varying", _
            "with", "write", "where", "zerofill"
                conv_name =3D Left$(PREFIX_ON_KEYWORD & str & =
SUFFIX_ON_KEYWORD, IDENT_MAX_SIZE)
                If (str =3D conv_name) Then
                    warn "In identifier '" & strname & "', the new form =
'" & strname & _
                    "' is a reserved word, and PREFIX_ON_KEYWORD ('" & _
                    PREFIX_ON_KEYWORD & "') and SUFFIX_ON_KEYWORD ('" & =
SUFFIX_ON_KEYWORD & _
                    "') make it larger than IDENT_MAX_SIZE, and after =
cut it is the same as the original! " & _
                    "This is usually caused by a void or empty =
PREFIX_ON_KEYWORD.", True
                    Error 5  ' invalid Procedure Call
                End If
        End Select
    End If
End Function


Private Function conv_str(str As String) As String
    Dim I As Integer, nlstr As String, rstr As Variant
   =20
    nlstr =3D ""
    rstr =3D Null
    I =3D 1
    While I <=3D Len(str)
        Select Case Mid$(str, I, 1)
            Case Chr$(0)  ' ASCII NUL
                nlstr =3D ""
                rstr =3D "\0"
            Case Chr$(8)  ' backspace
                nlstr =3D ""
                rstr =3D "\b"
            Case Chr$(9)  ' tab
                nlstr =3D ""
                rstr =3D "\t"
            Case "'"
                nlstr =3D ""
                rstr =3D "\'"
            Case """"
                nlstr =3D ""
                rstr =3D "\"""
            Case "\"
                nlstr =3D ""
                rstr =3D "\\"
            Case Chr$(10), Chr$(13)  ' line feed and carriage return
                If nlstr <> "" And nlstr <> Mid$(str, I, 1) Then
                    ' there was a previous newline and this is its pair: =
eat it
                    rstr =3D ""
                    nlstr =3D ""
                Else
                    ' this is a fresh newline
                    rstr =3D LINE_BREAK
                    nlstr =3D Mid$(str, I, 1)
                End If
            Case Else
                nlstr =3D ""
        End Select
        If Not IsNull(rstr) Then
            str =3D Left$(str, I - 1) & rstr & Right$(str, Len(str) - I)
            I =3D I + Len(rstr)
            rstr =3D Null
        Else
            I =3D I + 1
        End If
    Wend
    conv_str =3D str
End Function


Private Function conv_bin(str As String) As String
    Dim I As Integer, rstr As String
   =20
    rstr =3D ""
    I =3D 1
    While I <=3D Len(str)
        Select Case Mid$(str, I, 1)
            Case Chr$(0)  ' ASCII NUL
                rstr =3D "\0"
            Case Chr$(8)  ' backspace
                rstr =3D "\b"
            Case Chr$(9)  ' tab
                rstr =3D "\t"
            Case "'"
                rstr =3D "\'"
            Case """"
                rstr =3D "\"""
            Case "\"
                rstr =3D "\\"
            Case Chr$(10)  ' line feed
                rstr =3D "\n"
            Case Chr$(13)  ' carriage return
                rstr =3D "\r"
        End Select
        If rstr <> "" Then
            str =3D Left$(str, I - 1) & rstr & Right$(str, Len(str) - I)
            I =3D I + Len(rstr)
            rstr =3D ""
        Else
            I =3D I + 1
        End If
    Wend
    conv_bin =3D str
End Function


Private Sub warn(str As String, abortq As Boolean)
    If DISPLAY_WARNINGS Then MsgBox str, vbOKOnly Or vbExclamation, =
"Warning"
    warnings =3D warnings & COMMENT_PREFIX & " Warning: " & str & =
Chr$(13) & Chr$(10)
End Sub
------ =_NextPart_000_01BFF87E.9D3AAFE0--



php::bar PHP Wiki   -   Listenarchive