找回密码
 加入
搜索
查看: 3599|回复: 3

数据库操作遇到问题。不能写入中文数据!

[复制链接]
发表于 2010-1-22 20:08:30 | 显示全部楼层 |阅读模式
本帖最后由 nmgwddj 于 2010-1-22 20:13 编辑

我是用的论坛中一个数据库操作例子来修改的,想做个网吧远程工具
但是我在写入数据的时候 程序全部退出 而且数据没有写入。

下面是代码 还不完整 就是在窗口2里边 点击确定后 就出错了。请高手帮忙看下 感激不尽!

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
$mdb_data_path = "sky.mdb"
$mdb_data_pwd = ""
$name = "天生我才"
$pass = "过去"
$qq = 25359272
$e_mail = "xtybfgu@163.com"
$T = "*"
$tblname = "tywb"
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("数据库操作例子", 630, 400, 193, 115)
$ListView1 = GUICtrlCreateListView("   ID  |  网吧名称  |  IP  |   密码   |   端口 ", 8, 30, 450, 350)
$Button0 = GUICtrlCreateButton("创建数据", 500, 30, 97, 25, 0)
$Button1 = GUICtrlCreateButton("写入数据", 500, 90, 97, 25, 0)
$Button2 = GUICtrlCreateButton("更新数据", 500, 150, 97, 25, 0)
$Button3 = GUICtrlCreateButton("删除数据", 500, 210, 97, 25, 0)
$Button4 = GUICtrlCreateButton("读取数据", 500, 270, 97, 25, 0)
$Button5 = GUICtrlCreateButton("运行", 500, 330, 97, 25, 0)
$Button6 = GUICtrlCreateButton("窗口2", 500, 380, 97, 25, 0)
$Form2 = GUICreate("窗口2", 400, 100, 231, 334)
$mingcheng = GUICtrlCreateInput("网吧名称", 10, 15, 80, 20)
$IP = GUICtrlCreateInput("网吧IP", 110, 15, 80, 20)
$MIMA = GUICtrlCreateInput("连接密码", 210, 15, 80, 20)
$duankou = GUICtrlCreateInput("连接端口", 310, 15, 80, 20)
$Button7 = GUICtrlCreateButton("确定", 100, 50, 97, 25, 0)
$Button8 = GUICtrlCreateButton("取消", 200, 50, 97, 25, 0)
GUISwitch($Form1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button0
                        data($mdb_data_path, $tblname)
                Case $Button1;写入
                        sx()
                        du()
                Case $Button2 ;更新
                        up()
                        du()
                Case $Button3 ;删除
                        del()
                        du()
                Case $Button4 ;读取
                        du()
                Case $Button5 ;运行
                        yx()
                Case $Button6 ;窗口2
                        ck()
                Case $Button7 ;窗口2
                        qd()
                Case $Button8 ;窗口2
                        qx()

        EndSwitch
WEnd

Func du()
        GUICtrlSendMsg($ListView1, $LVM_DELETEALLITEMS, 0, 0)
        $addfld = ObjCreate("ADODB.Connection")
        $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)
        $RS = ObjCreate("ADODB.Recordset")
        $RS.ActiveConnection = $addfld
        $RS.Open("Select " & $T & " From " & $tblname)
        While Not $RS.eof And Not $RS.bof
                If @error = 1 Then ExitLoop
                GUICtrlCreateListViewItem($RS.Fields(0).value & "|" & $RS.Fields(1).value & "|" & $RS.Fields(2).value & "|" & $RS.Fields(3).value & "|" & $RS.Fields(4).value, $ListView1)
                $RS.movenext
        WEnd
        $RS.close
        $addfld.Close
EndFunc   ;==>du

Func del()
        $Strn = GUICtrlRead(GUICtrlRead($ListView1))
        $Strnspin = StringSplit($Strn, "|")
        $addfld = ObjCreate("ADODB.Connection")
        $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)
        $sQuery = "DELETE FROM " & $tblname & " IN '" & $mdb_data_path & "' WHERE id" & " = " & $Strnspin[1]
        $addfld.execute($sQuery)
        $addfld.close
        MsgBox(4096, "提示:", $Strnspin[1] & "    删除成功!!!")

EndFunc   ;==>del


Func up()
        $Strn = GUICtrlRead(GUICtrlRead($ListView1))
        $Strnspin = StringSplit($Strn, "|")
        $addfld = ObjCreate("ADODB.Connection")
        $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)
        $sQuery = "update " & $tblname & " set  name='221.202.188.62',pass='good',e_mail='25359272@qq.com' WHERE id" & " = " & $Strnspin[1]
        $addfld.execute($sQuery)
        $addfld.close
        MsgBox(4096, "提示:", $Strnspin[1] & "    更新成功!!!")
EndFunc   ;==>up


Func sx()
        $addfld = ObjCreate("ADODB.Connection")

        $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
        $x = 0
        While 1
                $x += 1
                If $x > 10 Then ExitLoop
                $addfld.Execute("insert into tywb (name,pass,qq,e_mail) values('" & $name & "','" & $pass & "','" & $qq & "','" & $e_mail & "')")
        WEnd
        $addfld.close
        MsgBox(4096, "提示:", " 成功写入数据库!")
EndFunc   ;==>sx
Func yx()
        $Strn = GUICtrlRead(GUICtrlRead($ListView1))
        $Strnspin = StringSplit($Strn, "|")
        $addfld = ObjCreate("ADODB.Connection")
        $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)
        Run("mstsc /v "&$Strnspin[2])
EndFunc
Func data($mdb_data_path, $tblname)
        If Not FileExists($mdb_data_path) Then
                $newMdb = ObjCreate("ADOX.Catalog")
                $newMdb.Create("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)
                $newMdb.ActiveConnection.Close;建数据库
                $addtbl = ObjCreate("ADODB.Connection")
                $addtbl.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)
                $addtbl.Execute("CREATE TABLE " & $tblname)
                $addtbl.Close;建表

                $addfld = ObjCreate("ADODB.Connection")
                $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)
                $addfld.Execute("ALTER TABLE " & $tblname & " ADD id identity(1, 1) primary key,name char ,pass char ,qq int,e_mail char")
                $addfld.Close;建列表名
                MsgBox(64, "提示", "建立数据库成功", 5)
        Else
                MsgBox(64, "提示", "你已经建立了一个数据库了", 5)
        EndIf
EndFunc   ;==>data
Func ck()
        GUISwitch($Form2)                ;  切换当前窗口到子窗口
       GUISetState(@SW_SHOW)
EndFunc
Func qd()
        $a=GUICtrlRead($mingcheng)
    $b=GUICtrlRead($IP)
    $c=GUICtrlRead($MIMA)
    $d=GUICtrlRead($duankou)
        MsgBox(64, "提示", GUICtrlRead($mingcheng), 5)
        $addfld = ObjCreate("ADODB.Connection")
        $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
        $addfld.Execute("insert into tywb (name,pass,qq,e_mail) values('" & $a & "','" & $b & "','" & $c & "','" & $d & "')")
        $addfld.Close
EndFunc

Func qx()
        GUISwitch($Form2)
        GUISetState(@SW_HIDE)
endfunc
发表于 2010-1-22 22:21:19 | 显示全部楼层
本帖最后由 C.L 于 2010-1-22 22:29 编辑

窗口2 写入数据类型有问题:
Func data($mdb_data_path, $tblname)中:
$addfld.Execute("ALTER TABLE " & $tblname & " ADD id identity(1, 1) primary key,name char ,pass char ,qq int,e_mail char")定义
qq 项的数据类型是 int ,而

Func qd()
中写入的 $c 的数据类型为 char 出错,所以会退出。

将窗口2中的$c 改为数字,就不会出错了
发表于 2010-1-22 22:34:53 | 显示全部楼层
如果一定要输入中文,将数据库中的 qq 定义为char型,就可以输入中文了。
具体步骤:

$addfld.Execute("ALTER TABLE " & $tblname & " ADD id identity(1, 1) primary key,name char ,pass char ,qq int,e_mail char")中的"qq int" 改为"qq char" 重新建立数据库,再写入中文就没问题了。

评分

参与人数 1金钱 +20 贡献 +2 收起 理由
afan + 20 + 2

查看全部评分

 楼主| 发表于 2010-1-23 00:37:20 | 显示全部楼层
非常感谢仁兄
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-22 14:34 , Processed in 0.091507 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表