amxi 发表于 2011-11-21 19:59:48

今天什么事也没有做,光搜索了....终于
问题解决了,我的那个鸡动~~{:face (254):}
原来真的是SQL语句出错...我的那个汗

'Select * From table_namewhere keyword="'&$$keyword&'"'

十分感谢 kk_lee69
及另外两位朋友的讨论

amxi 发表于 2011-11-21 20:19:26

而且你上面的語法 也有另外一個錯誤..
                     $conn=objcreate("ADODB.Connection")
                $rs=ObjCreate("ADODB.Recordset")
                $conn.open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & $mdb_name & ";Jet Oledb:Database Password=" & $mdb_pwd)
                $rs.Activeconnection=$conn
這幾行語法放到最前面就可以了只要 不要下$conn.close
其他地方就不用重複下了

这个我试了下,把上面四句放在变量后面,然后注释掉函数中的4个,但是执行的结果有错,

Func _GetHDD()
        ;        $conn=objcreate("ADODB.Connection")
        ;        $rs=ObjCreate("ADODB.Recordset")
           ; $conn.open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & $mdb_name & ";Jet Oledb:Database Password=" & $mdb_pwd)
        ;        $rs.Activeconnection=$conn
                $rs.Open ("Select "&$star & " From " &$mdb_HDD_table )
错误提示为
D:\Program Files\AutoIt3\AV3\?????.au3 (132) : ==> The requested action with this object has failed.:
$rs.Open ("Select "&$star & " From " &$mdb_HDD_table )
$rs.Open ("Select "&$star & " From " &$mdb_HDD_table )^ ERROR

kk_lee69 发表于 2011-11-21 23:30:17

因為你放錯位置
我改個版本給你看看吧我大概知道你要做啥了
可是由於簡繁問題

所以資料庫 我就用英文為主要的欄位名稱
程式我可以給你簡體版的   你自己在測試看看吧

kk_lee69 发表于 2011-11-21 23:54:28

已經發現 我跟你說的語法 你無法使用的問題了......原因出在一個空格

我的語法是 Select價格 FROM CPU WHERE品名='INTEL3.5G'

如果依照你原本打的變數帶入以後 會變成Select價格 FROM CPUWHERE品名='INTEL3.5G'

你的CPU 跟 WHERE 中間沒有空格語法當然出錯誤

kk_lee69 发表于 2011-11-22 00:08:53

本帖最后由 kk_lee69 于 2011-11-22 00:10 编辑

回复 17# amxi

語法幫你修正好了......

你用太多的 開
               $conn=objcreate("ADODB.Connection")
                $rs=ObjCreate("ADODB.Recordset")
                $conn.open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & $mdb_name & ";Jet Oledb:Database Password=" & $mdb_pwd)
                $rs.Activeconnection=$conn

也用了太多的 關
                $conn.close

整個資料庫 每做一件事情 就開關一次 不會太累嗎??
整個程式開 跟 關只需要一次...... 你可以看看我的寫法.....你之前有太多的關   你沒清除乾淨當然不能把 開 取消

程式 一進去開資料庫......其他的用RS 下去作業就好 退出的時候 把資料庫關上就可以了下面是我修正後的語法

加油 還有很多地方要改我大概知道你想做啥了 呵呵.............

#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.6.1
Author:         myName

Script Function:
        Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <windowsconstants.au3>
#include <comboconstants.au3>
$nm="品名"
$nm1="价格"
$mdb_path=""
$mdb_name="da.mdb"
$mdb_pwd=""
;$mdb_table_name="MyPC"
$mdb_cpu_table="CPU"
$mdb_hdd_table="HDD"
$mdb_mb_table="主板"
$mdb_nc_table="内存"
$mdb_Graphic_table="Graphic"
$mdb_XSQ_table="显示器"


$star="*"



$nform=guicreate("price list of inner market",500,500)
;$ListView1 = GUICtrlCreateListView(" 品名 | 价格 | 日期 ", 188, 10, 100, 100)

$nCPU=GUICtrlCreateLabel(" CPU",6,50,50,20)
$CPU_comb=GUICtrlCreateCombo("   CPU",60,50,160,20)
$cpu_price=GUICtrlCreateEdit(" ",230,50,80,20)

$nMB=GUICtrlCreateLabel(" 主板 ",6,80,50,20)
$MB_comb=GUICtrlCreateCombo("   主板 ",60,80,160,20)
$mb_price=GUICtrlCreateEdit(" ",230,80,80,20)


$nRaM=GUICtrlCreateLabel("内存 ",6,110,50,20)
$Ram_comb=GUICtrlCreateCombo("   内存",60,110,160,20)
$Ram_price=GUICtrlCreateEdit(" ",230,110,80,20)


$nHDD=GUICtrlCreateLabel(" 硬盘 ",6,140,50,20)
$HDD_comb=GUICtrlCreateCombo("   ",60,140,160,20)
$HDD_price=GUICtrlCreateEdit(" ",230,140,80,20)


$nGraphic=GUICtrlCreateLabel(" 显卡 ",6,170,50,20)
$G_comb=GUICtrlCreateCombo("   显卡 ",60,170,160,20)
$G_price=GUICtrlCreateEdit(" ",230,170,80,20)


$nCase=GUICtrlCreateLabel(" 机箱 ",6,200,50,20)
$Case_comb=GUICtrlCreateCombo("   机箱",60,200,160,20)
$Case_price=GUICtrlCreateEdit(" ",230,200,80,20)


$nPower=GUICtrlCreateLabel(" 电源 ",6,230,50,20)
$Power_comb=GUICtrlCreateCombo("   电源",60,230,160,20)
$Power_price=GUICtrlCreateEdit(" ",230,230,80,20)


$nXSQ=GUICtrlCreateLabel(" 显示器 ",6,260,50,20)
$XSQ_comb=GUICtrlCreateCombo("   显示器",60,260,160,20)
$XSQ_price=GUICtrlCreateEdit(" ",230,260,80,20)


$nSJ=GUICtrlCreateLabel(" 鼠键套 ",6,290,50,20)
$SJ_comb=GUICtrlCreateCombo("",60,290,120,20)
$SJ_price=GUICtrlCreateEdit(" ",230,290,80,20)


$nYX=GUICtrlCreateLabel(" 音箱 ",6,320,50,20)
$YX_comb=GUICtrlCreateCombo("",60,320,120,20)
$YX_price=GUICtrlCreateEdit(" ",230,320,80,20)


$nDVD=GUICtrlCreateLabel(" 光驱 ",6,350,50,20)
$DVD_comb=GUICtrlCreateCombo("",60,350,120,20)
$DVD_price=GUICtrlCreateEdit(" ",230,350,80,20)


$button1=GUICtrlCreateButton("get price",2,2,50,20)
$Button2 = GUICtrlCreateButton("读取数据", 280, 408, 113, 25, 0)

$conn=objcreate("ADODB.Connection")
$rs=ObjCreate("ADODB.Recordset")
$conn.open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & $mdb_name & ";Jet Oledb:Database Password=" & $mdb_pwd)
$rs.Activeconnection=$conn


_getcpu()
_GetHDD()


GUISetState(@sw_show)

while 1
        $msg=GUIGetMsg()
        Switch $msg
        case $gui_event_close
                $conn.close
                Exit
        case $button1
                _getcpu()
        case $button2
                MsgBox(0,"",@scriptdir&"\da.mdb")
                _read()
        case $cpu_comb
                $type=GUICtrlRead($cpu_comb)
                $rs.Open ("Select"&$star &" From "&$mdb_cpu_table& " where name='"&$type&"'")
                        GUICtrlSetData($cpu_price,$rs.fields(2).value)
                $rs.close
               

        EndSwitch
WEnd



func _read()
        GUICtrlSendMsg($ListView1, $LVM_DELETEALLITEMS, 0, 0)
                $rs.Open ("Select "&$star & " From " &$mdb_cpu_table)
;         $RS.Open ("Select "&$T & " From " & $tblname )
      while Not $RS.eof And Not $RS.bof
            if @error then ExitLoop
                                        ;GUICtrlCreateListViewItem ( $RS.Fields (0).value&"|"& $RS.Fields (1).value&"|"& $RS.Fields (2).value,$ListView1 )
                                        GUICtrlCreateListViewItem( $rs.fields(1).value&"|"& $rs.fields(2).value ,$listview1)
                                        $rs.movenext
                                WEnd
                                $rs.close

EndFunc
                       
       

    Func _GetHDD()

                $rs.Open ("Select "&$star&" From "&$mdb_HDD_table )
               
                while not $rs.eof and not $rs.bof
                        if @error then ExitLoop
                        GUICtrlSetData($hdd_comb,$rs.fields(1).value)
                        $rs.movenext
                WEnd
                $rs.close

        EndFunc

    Func _GetCPU()

                $rs.Open ("Select "&$star & " From " &$mdb_cpu_table )
               
                while not $rs.eof and not $rs.bof
                        if @error then ExitLoop
                        GUICtrlSetData($cpu_comb,$rs.fields(1).value)
                        $rs.movenext
                WEnd
                $rs.close

        EndFunc
       
        Func _GetMB()

                $rs.Open ("Select "&$star & " From " &$mdb_mb_table )
               
                while not $rs.eof and not $rs.bof
                        if @error then ExitLoop
                        GUICtrlSetData($mb_comb,$rs.fields(1).value)
                        $rs.movenext
                WEnd
                $rs.close

        EndFunc
       
        Func _GetGraphic()

                $rs.Open ("Select "&$star & " From " &$mdb_Graphic_table )
               
                while not $rs.eof and not $rs.bof
                        if @error then ExitLoop
                        GUICtrlSetData($G_comb,$rs.fields(1).value)
                        $rs.movenext
                WEnd
                $rs.close

        EndFunc


amxi 发表于 2011-11-22 09:07:39

回复 20# kk_lee69

确实资料库每做一件事就开关一次,累.我也觉得代码冗余,
   十分的3Q,半夜帮我做案,哈, 让老大费神了,也让代码更加精简.
我这整的算是个报价器吧.嘿嘿

cwans 发表于 2011-11-25 23:17:53

支持一下,看看

qsy666888 发表于 2014-5-10 19:40:50

学习了,谢谢楼主
页: 1 [2]
查看完整版本: mdb数据库 查询关联问题 [已解决]