xuanniao110 发表于 2019-7-13 14:18:50

求解数据库求和[已解决]

本帖最后由 xuanniao110 于 2019-7-15 19:15 编辑

            $addfld.Close
            $addfld = ObjCreate("ADODB.Connection")
            $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
            $RS = ObjCreate("ADODB.Recordset")
            $RS.ActiveConnection = $addfld
                $RS.Open("SELECT SUM(2019xs) as sumvalue FROM ["&$mon&"yue"&"] where rq <= "&Int($mday));当月销售的数据
            While Not $RS.eof And Not $RS.bof
                If @error = 1 Then ExitLoop
                $xszh = $RS.Fields(0).value
                MsgBox(0,"",$xszh)
            $RS.movenext
            WEnd
            $RS.close
            $addfld.Close



求解   是我语句错误么?   是程序语句错误还是SQL运用语句错误?

下面是AU3报错信息

>"D:\Program Files\AutoIt3\SciTE\AccAu3Wrapper\AccAu3Wrapper.exe" /run /prod /ErrorStdOut /in "D:\Desktop\新建文件夹\Z11\新界面.au3" /UserParams   
+>14:14:24 开始 AccAu3Wrapper v.16.306.1237.0 SciTE v.3.6.2.0
    ------------------------------------------------------------------------------------------------------
    键盘布局:00000804操作系统:WIN_10/CPU:X64 系统架构:X64    文件编码:ANSI(512)    字符集:936
    SciTE目录 => D:\Program Files\AutoIt3\SciTE   用户目录 => C:\Users\Administrator\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper   SCITE_USERHOME => C:\Users\Administrator\AppData\Local\AutoIt v3\SciTE
    ------------------------------------------------------------------------------------------------------
>运行 AU3Check (3.3.14.2)从:D:\Program Files\AutoIt3
+>14:14:24 AU3Check 语法检查结束.rc:0
>运行:(3.3.14.2):D:\Program Files\AutoIt3\autoit3.exe "D:\Desktop\新建文件夹\Z11\新界面.au3"   
--> 按 Ctrl+Alt+Break 重新启动或按 Ctrl+Break 停止
@@ (587) :(14:25) xssj()
@@ (525) :(14:27) scbb()
"D:\Desktop\?????\Z11\???.au3" (577) : ==> The requested action with this object has failed.:
$RS.Open("SELECT SUM(2019xs) as sumvalue FROM ["&$mon&"yue"&"] where rq <= "&Int($mday))
$RS^ ERROR
->14:14:27 AutoIt3.exe 结束.rc:1
+>14:14:27 AccAu3Wrapper 完成.
>Exit code: 1    Time: 3.473


xuanniao110 发表于 2019-7-13 17:11:38

补充下;
#AccAu3Wrapper_UseX64 = n
;数据库定义
$mdb_data_path = @ScriptDir & "\data.mdb"
$mdb_data_pwd = "z11"
$yue = @MON ;月
$ri = @MDAY ;日
$XS = @YEAR & "xs" ;销售列
$JS = @YEAR & "js" ;件数列
$VIP = @YEAR & "vip" ;会员列
$WF = @YEAR & "wf" ;微粉列
$addfld = ObjCreate("ADODB.Connection")
$addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
$RS = ObjCreate("ADODB.Recordset")
$RS.ActiveConnection = $addfld
$RS.Open("SELECT SUM(2019xs) FROM ["&$yue&"yue"&"] where rq <= "&Int($ri));当月销售的数据
While (Not $RS.eof And Not $RS.bof);循环读表 有资料就跑回圈没资料就会跳出
MsgBox(0,"", $RS.Fields(0).value);显示去年当月总销售数据
$RS.movenext;下一笔资料
WEnd;结束循环读

chzj589 发表于 2019-7-13 22:06:28

xuanniao110 发表于 2019-7-13 17:11
补充下;
#AccAu3Wrapper_UseX64 = n
;数据库定义



#AccAu3Wrapper_UseX64 = n
;数据库定义
$mdb_data_path = @ScriptDir & "\data.mdb";数据库文件
$mdb_data_pwd = "z11";数据库密码
$adTable = "Table1";数据库表名
$yue = @MON ;月
$ri = @MDAY ;日
$XS = @YEAR & "xs" ;销售列
$JS = @YEAR & "js" ;件数列
$VIP = @YEAR & "vip" ;会员列
$WF = @YEAR & "wf" ;微粉列
$addfld = ObjCreate("ADODB.Connection")
$addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
$RS = ObjCreate("ADODB.Recordset")
$RS.ActiveConnection = $addfld
$RS.open("SELECT * FROM " & $adTable)
Local $total = 0
Local $tota2 = 0
Local $tota3 = 0
While Not $RS.eof And Not $RS.bof
        If @error = 1 Then ExitLoop
                $total &= $RS.Fields(0).value;第一列
                $tota2 &= $RS.Fields(1).value;第二列
                $tota3 &= $RS.Fields(2).value;第三列       
                $RS.movenext
        WEnd;结束循环读
  MsgBox(0,"", $total& @CRLF &$tota2& @CRLF &$tota3);显示去年当月总销售数据
$RS.close
$addfld.Close

xuanniao110 发表于 2019-7-13 23:30:22

chzj589 发表于 2019-7-13 22:06

#AccAu3Wrapper_UseX64 = n
;数据库定义


大神,是根据日期求07月表中2019xs这一列的总和!
我知道你是让我在查询的同时进行变量,最后得出总和

chzj589 发表于 2019-7-14 08:21:47

xuanniao110 发表于 2019-7-13 23:30
大神,是根据日期求07月表中2019xs这一列的总和!
我知道你是让我在查询的同时进行变量,最后得出总和

这句改为:
$RS.Open("SELECT SUM(2019xs) FROM ["&$yue&"yue"&"] where rq <= '" &Int($ri)&"'");当月销售的数据
试试看

chzj589 发表于 2019-7-14 08:32:41

xuanniao110 发表于 2019-7-13 23:30
大神,是根据日期求07月表中2019xs这一列的总和!
我知道你是让我在查询的同时进行变量,最后得出总和


#AccAu3Wrapper_UseX64 = n
;数据库定义
$mdb_data_path = @ScriptDir & "\data.mdb";数据库文件
$mdb_data_pwd = "z11";数据库密码
$adTable1 = "01yue";数据库表1
$adTable2 = "07yue";数据库表2
$adTable3 = "yjh";数据库表3
$yue = @MON ;月
$ri = @MDAY ;日
$XS = @YEAR & "xs" ;销售列
$JS = @YEAR & "js" ;件数列
$VIP = @YEAR & "vip" ;会员列
$WF = @YEAR & "wf" ;微粉列
$addfld = ObjCreate("ADODB.Connection")
$addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
$RS = ObjCreate("ADODB.Recordset")
$RS.ActiveConnection = $addfld
$RS.Open("SELECT SUM(2019xs) FROM ["&$yue&"yue"&"] where rq <= "&Int($ri));当月销售的数据
$RS.open("SELECT * FROM " & $adTable2 & " WHERE rq <='" & Int($ri) & "'")
Local $total = 0 ;总和
Local $tota2 = 0
Local $tota3 = 0
While Not $RS.eof And Not $RS.bof
        $total &= $RS.Fields(0).value;第一列
        $RS.movenext
WEnd;结束循环读
  MsgBox(0, "", $total);显示
$RS.close
$addfld.Close

kk_lee69 发表于 2019-7-14 14:33:46

可以提供 範例資料庫 與出錯的 範例程式嗎??

xuanniao110 发表于 2019-7-14 18:12:22

kk_lee69 发表于 2019-7-14 14:33
可以提供 範例資料庫 與出錯的 範例程式嗎??

明天我提供给你

chzj589 发表于 2019-7-14 20:09:01

本帖最后由 chzj589 于 2019-7-14 21:53 编辑

xuanniao110 发表于 2019-7-14 18:12
明天我提供给你
应该可以用,试试

#AccAu3Wrapper_UseX64 = n
;数据库定义
$mdb_data_path = @ScriptDir & "\data.mdb";数据库文件
$mdb_data_pwd = "z11";数据库密码
$adTable1 = "01yue";数据库表1
$adTable2 = "07yue";数据库表2
$adTable3 = "yjh";数据库表3
$yue = @MON ;月
$ri = @MDAY ;日
$XS = @YEAR & "xs" ;销售列
$JS = @YEAR & "js" ;件数列
$VIP = @YEAR & "vip" ;会员列
$WF = @YEAR & "wf" ;微粉列
$addfld = ObjCreate("ADODB.Connection")
$addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
$RS = ObjCreate("ADODB.Recordset")
$RS.ActiveConnection = $addfld
$RS.open("SELECT SUM(2019xs) FROM " & $adTable2 & " WHERE rq <='" & $ri & "'");当月销售的数据
Local $total = 0
While Not $RS.eof And Not $RS.bof
      If @error = 1 Then ExitLoop
      $total = $RS.Fields(0).value
      $RS.movenext
WEnd
MsgBox(0, "", StringFormat('%.2f', $totale));显示
$RS.close
$addfld.Close

$RS.open("SELECT SUM(2019xs) FROM 07yue WHERE rq <='" & $ri & "'");当月销售的数据

xuanniao110 发表于 2019-7-15 09:06:54

kk_lee69 发表于 2019-7-14 14:33
可以提供 範例資料庫 與出錯的 範例程式嗎??

程序附件   
程序数据库   

xuanniao110 发表于 2019-7-15 09:08:00

chzj589 发表于 2019-7-14 20:09
应该可以用,试试

#AccAu3Wrapper_UseX64 = n


程序附件和程序数据库都已上传   
修改你改成的语句依然有问题

chzj589 发表于 2019-7-15 12:02:31

本帖最后由 chzj589 于 2019-7-16 08:13 编辑

xuanniao110 发表于 2019-7-15 09:08
程序附件和程序数据库都已上传   
修改你改成的语句依然有问题
怪事,在我建立的数据库就能通过。
整列合计吧
   
Local $ri1 = @MDAY                  
$addfld = ObjCreate("ADODB.Connection")
$addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
            $RS = ObjCreate("ADODB.Recordset")
            $RS.ActiveConnection = $addfld
            Local $xszh, $xszh1
         ;$RS.open("SELECT * FROM 07yue")         
         $RS.open("SELECT * FROM 07yue WHERE rq<=" & $ri1 )
            While Not $RS.eof And Not $RS.bof
                If @error = 1 Then ExitLoop
                $xszh += $RS.Fields(2).value
                $xszh1 += $RS.Fields(3).value
                ;MsgBox(0,"",$xszh)
            $RS.movenext
                WEnd
                MsgBox(0,"","目标数据合计"&$xszh& @CRLF &"销售数据合计"&$xszh1)
            $RS.close
            $addfld.Close










xuanniao110 发表于 2019-7-15 13:56:57

chzj589 发表于 2019-7-15 12:02
怪事,在我建立的数据库就能通过。
整列合计吧



整列合计,就不能通过日期合计了!比如我选择的10日,那合计的销售总和就应该是10日以前包括10日的总和

chzj589 发表于 2019-7-15 14:02:46

本帖最后由 chzj589 于 2019-7-15 14:09 编辑

xuanniao110 发表于 2019-7-15 09:08
程序附件和程序数据库都已上传   
修改你改成的语句依然有问题
问题出在数据库的字段名。

把字段名<rq,2019mb,2019xs>改为<kzhmima,kzhmima1,kzhmim2>
注:日期在10日前需为二位数及为01-09
用:

Local $ri1 = @MDAY ;日
$addfld = ObjCreate("ADODB.Connection")
$addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
$RS = ObjCreate("ADODB.Recordset")
$RS.ActiveConnection = $addfld
$RS.open("SELECT SUM(kzhmima1) FROM 01yue WHERE kzhmima<='" & $ri1 & "'")
Local $total = 0 ;总和
Local $totale = 0
While Not $RS.eof And Not $RS.bof
      If @error = 1 Then ExitLoop
      ;$total = $RS.Fields(3).value
      $totale = $RS.Fields(0).value
      $RS.movenext
WEnd
MsgBox(0, "", StringFormat('%.2f', $totale));显示
$RS.close
$addfld.Close


chzj589 发表于 2019-7-15 16:07:12

xuanniao110 发表于 2019-7-15 13:56
整列合计,就不能通过日期合计了!比如我选择的10日,那合计的销售总和就应该是10日以前包括10日的总和

14楼的试试看:face (10):
页: [1] 2
查看完整版本: 求解数据库求和[已解决]