找回密码
 加入
搜索
查看: 11129|回复: 22

[AU3基础] mdb数据库 查询关联问题 [已解决]

  [复制链接]
发表于 2011-11-20 09:41:22 | 显示全部楼层 |阅读模式
本帖最后由 amxi 于 2011-11-21 20:00 编辑


上图为数据库表.

我想实现的是在combo中选择CPU型号,然后edit控件自动显示对应的价格,这个谁指点一下,我卡住了..谢谢

#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>

$mdb_path=""
$mdb_name="da.mdb"
$mdb_pwd=""
;$mdb_table_name="MyPC"
$mdb_cpu_table="CPU"
$mdb_hdd_table="硬盘"
$mdb_mb_table="主板"
$mdb_nc_table="内存"


$star="*"

$nform=guicreate("price list of inner market",500,500)
$ListView1 = GUICtrlCreateListView(" 品名 | 价格 | 日期 ", 288, 24, 200, 161)

$nCPU=GUICtrlCreateLabel(" CPU",6,150,50,20)
$CPU_comb=GUICtrlCreateCombo("   CPU",60,150,120,20)
$cpu_price=GUICtrlCreateEdit(" ",190,150,80,20)

$nCPU=GUICtrlCreateLabel(" 主板 ",6,180,50,20)
$MB_comb=GUICtrlCreateCombo("   主板 ",60,180,120,20)

$nCPU=GUICtrlCreateLabel("  内存 ",6,210,50,20)
$NC_comb=GUICtrlCreateCombo("   内存",60,210,120,20)

$nCPU=GUICtrlCreateLabel(" 硬盘 ",6,240,50,20)
$HDD_comb=GUICtrlCreateCombo("     ",60,240,120,20)

_getcpu()
_getmb()
_gethdd()

GUISetState(@sw_show)

while 1 
        $msg=GUIGetMsg()
        Switch $msg
        case $gui_event_close
                Exit
        case $button1
                _getcpu()
        case $button2
                _read()
        case $cpu_comb
                        $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_cpu_table )
                
                while not $rs.eof and not $rs.bof
                        if @error then ExitLoop
                        GUICtrlSetData($cpu_price,$rs.fields(2).value)
                        $rs.movenext
                WEnd
                $rs.close
                $conn.close
                ;MsgBox("",$rs.fields(2).value,$guictrlread($cpu_combo))
        EndSwitch
WEnd

func _read()
        GUICtrlSendMsg($ListView1, $LVM_DELETEALLITEMS, 0, 0)
                $obj=ObjCreate("ADODB.Connection")
          ;连接数据库
        $obj.open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" &$mdb_name)  
                  ;打开数据库
                $rs=ObjCreate("ADODB.Recordset")
                  ; 建立记录
                $rs.ActiveConnection =$obj 
          
                $rs.Open ("Select "&$star & " From " &$mdb_cpu_table)

        while Not $RS.eof And Not $RS.bof
            if @error then ExitLoop
                                        ;
                                        GUICtrlCreateListViewItem( $rs.fields(1).value&"|"& $rs.fields(2).value ,$listview1)
                                        $rs.movenext
                                WEnd
                                $rs.close
                                $obj.close
                        EndFunc
                        
        


    Func _GetCPU()
                $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_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
                $conn.close
        EndFunc

;func _getmb()
;endFunc
        
                

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2011-11-20 11:02:36 | 显示全部楼层
一直坐等.....
发表于 2011-11-20 11:28:28 | 显示全部楼层
把mdb文件发下。。
发表于 2011-11-20 21:11:04 | 显示全部楼层
看看帮助里的
_GUICtrlListView_AddArray
发表于 2011-11-20 21:14:50 | 显示全部楼层
Edit取值可以用
GUICtrlSetData($Edit, $youvalue)
 楼主| 发表于 2011-11-21 09:24:24 | 显示全部楼层
回复 4# lpxx


    我那个不是listview啊..
是mdb
 楼主| 发表于 2011-11-21 09:26:43 | 显示全部楼层
回复 3# yeqing880


    mdb就是图片上的那几行. cpu名称,对应的价格.就两样.
 楼主| 发表于 2011-11-21 09:32:15 | 显示全部楼层
回复 5# lpxx


    我知道guictrlsetdata可以赋值 , ,我不会的的是如何在mdb中取出与CPU型号对应的价格
发表于 2011-11-21 10:03:19 | 显示全部楼层
本帖最后由 kk_lee69 于 2011-11-21 10:14 编辑

回复 8# amxi


   老大 你的語法有錯誤吧  你的61行 到  74行 意義是指  當你 選擇了 其中的一種CPU  就要秀出 它的價格對吧....
       case $cpu_comb
                        $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_cpu_table )
                
                while not $rs.eof and not $rs.bof
                        if @error then ExitLoop
                        GUICtrlSetData($cpu_price,$rs.fields(2).value)
                        $rs.movenext
                WEnd
                $rs.close
                $conn.close

可是 這行的意思是  列出 所有 CUP 資料表裡面的 每個CPU 的價格 也就是說 有一百種CUP 跟 一百種價格 他全部會列出來
$rs.Open ("Select "&$star & " From " &$mdb_cpu_table )
然後你又加上了   GUICtrlSetData($cpu_price,$rs.fields(2).value)  這個放在迴圈中.......所以你得到的價格永遠是迴圈的最後一個價格

你的語法應該有點問題的.........你應該是 先取得你 所選的值......先讀取 COMBO 的值 然後
$rs.Open ("Select "&$star & " From " &$mdb_cpu_table&"  WHERE CPU='"&$COMBO取回的值&"'" )   
這樣就只會有一個值出現  所以 下面    while.....Wend  這回圈也不用了
值些 用這行 就可以了
GUICtrlSetData($cpu_price,$rs.fields(2).value)...............
$rs.close

這樣說不知道是否了解
 楼主| 发表于 2011-11-21 11:47:54 | 显示全部楼层
回复 9# kk_lee69

谢谢,大概的理解了您说的意思,

case $cpu_comb
                        $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
                $type=GUICtrlRead($cpu_comb)
                ;MsgBox('','',$type)
                $rs.Open ("Select  "&$star &" From " & $mdb_cpu_table & "where 'cpu'="&$type)
                
                                
                        GUICtrlSetData($cpu_price,$rs.fields(2).value)
                
                
                $rs.close
                $conn.close

但在处理语句时出现错误.这个数据库东西我算是第一次搞,SQL还不太懂.不知道是啥意思.

    D:\Program Files\AutoIt3\work\?????.au3 (116) : ==> The requested action with this object has failed.:
$rs.Open ("Select  "&$star &" From " & $mdb_cpu_table & "where '品名'="&$type)
$rs.Open ("Select  "&$star &" From " & $mdb_cpu_table & "where '品名'="&$type)^ ERROR

把数据库中的品名改成字母也一样..
发表于 2011-11-21 13:09:44 | 显示全部楼层
你打錯了  品名那個位置  是不可以加上' 者個符號的
而且品名 必須要是  你的CPU表裡面的 代表CPU 的那個欄位名稱

我們先來定義一下你的結構  你打開 ACCESS 後  如果照你上面的寫法  你應該看到的是
CPU
硬盘
主板
内存

然後進入 CPU 這個資料裡面  會看到 編號 品名 價格 對吧
所以..... SQL 語法應該是  Select  價格 FROM CPU WHERE  品名='INTEL3.5G'
這樣就 可以抓取到 品名為 INTEL3.5G 的價格

請注意 我上面的語法才是正確的喔  其他你多加引號 會有問題的

轉換成 AU3語法  
$rs.Open ("Select  "&$star &" From " & $mdb_cpu_table & "where 品名='"&$type&"'")
這樣的語法才是對的喔
发表于 2011-11-21 13:13:34 | 显示全部楼层
回复 10# amxi


    你原本的
$rs.Open ("Select  "&$star &" From " & $mdb_cpu_table & "where '品名'="&$type)
要改成
$rs.Open ("Select  "&$star &" From " & $mdb_cpu_table & "where 品名='"&$type&"'")

這樣才對

而且你上面的語法 也有另外一個錯誤..
                       $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
其他地方就不用重複下了
 楼主| 发表于 2011-11-21 13:59:35 | 显示全部楼层
回复 12# kk_lee69

按照你的语句改了还是不行,我上传脚本与mdb,麻烦请再帮我看看.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-11-21 14:12:19 | 显示全部楼层
老大  你的CPU 表裡面的欄位  根本沒有品名

是 NAME 跟 PRICE    所以語法當然會有問題呀

晚上在幫你改吧  現在上班 不方便
 楼主| 发表于 2011-11-21 14:32:19 | 显示全部楼层
回复 14# kk_lee69


    谢了老兄.

我是怕不支持汉字所以才又改成了name /price,结果也一样不行.

你先忙吧,我再找找资料看.
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-20 22:46 , Processed in 0.112986 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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