大富翁里就沒有一個能幫我解決這個問題的高手了嗎!!!!!!!!!!!!!!!!!!!!!!!!!!都把我給急死了!!! (10分)

  • 主题发起人 主题发起人 sydan
  • 开始时间 开始时间
S

sydan

Unregistered / Unconfirmed
GUEST, unregistred user!
這樣的,我有一個SQL語句想把一些數據加總一起!需要加總的數據表又有好幾個,所以.....
我用的是PARADOX數據表的DB文件!

幣种數據表(itvadata)
itvata itshow
-------------------------
RMB 人民幣
HKD 港幣
USD 美元
YEB 越幣

資金 iotrsu
itseql ituser itvata ittype itquer itarrive itinout
-------------------------------------------------------------
00000001 YSL RMB 入帳 100.00 2002/01/01 2002/04/03
00000002 SYDAN HKD 入帳 300.00 2002/04/01
00000003 SYDAN HKD 轉帳 -50.00 2002/04/01
00000004 SYDAN RMB 入帳 500.00 2002/04/01
00000005 SYDAN USD 入帳 100.00 2002/04/05

購物主表iooutid
itseql ituser itdate
-------------------------------------------
00000001 YSL 2002/01/02
00000001 SYDAN 2002/04/01

購物明細表 iosout
isseql isuser istydata isname isoutp isnuit isvata ispric isquer
--------------------------------------------------------------------------------------------
00000001 YSL 日常用品 衣服 1 件 RMB 100.00 100.00
00000001 SYDAN 日常用品 牙刷 5 個 HKD 1.00 5.00
00000001 SYDAN 日常用品 牙膏 1 支 RMB 23.00 23.00

**************************************************************************************
* 執行我的程式后我就得到如下數據:(當用戶為:SYDAN 時間為今天時) *
* 幣种 總入帳金額 總消費金額 剩餘金額 *
* ------------------------------------------------------------------------ *
* RMB 500.00 23.00 467.00 *
* HKD 250.00 5.00 245.00 *
* USD 100.00 0.00 100.00 *
**************************************************************************************
我現在是這樣寫的,但運行后沒有數据:
SELECT Itvadata.Itvata,
SUM( Iotrsu.Itquer ) Itquer,
SUM( Iosout.Isquer ) Isquer
FROM Itvadata,Iotrsu,Iosout
Where(( Iotrsu.ituser =:itseid ) and
( Iotrsu.itarrive >= :indate ) and
( Iotrsu.itarrive <= :oudate ) and
( Iotrsu.Itvata = Itvadata.Itvata ) and
( Iosout.isvata = Itvadata.Itvata) and
( Iosout.Isseql in
( select Iooutid.itseql from Iooutid where ((ituser=:itseid)and( itdate>= :indate )and( itdate>= :oudate )))))
GROUP BY Itvadata.Itvata
BrowiotrsuQuery.ParamByName('itseid').AsString:=mainform.UserId; 用戶編號的值
mydata.BrowiotrsuQuery.ParamByName('indate').AsDateTime:=strtodate(edit1.Text); 時間從的值
mydata.BrowiotrsuQuery.ParamByName('oudate').AsDateTime:=strtodate(edit2.Text); 時間至的值
[red]<即便我把所有的日期限制取消,數據也不能正確!>[/red]
麻煩各位大哥了!小弟現在正等著呢???
謝謝

這以是第三天了,大俠們,救救小弟吧!!!
[blue](只要能解決我說的那個問題,至於用什麼方法都可以!同時也可以分幾條SQL語句來
完成,比如先將要求時間的進帳統計起來並保存成臨時數據表[但我不會做],再通過這個臨時表來統計
消費主明細表!!)
[/blue]
 
下载一个ehlib控件
 
別用edit,改用datetimepicker.
mydata.BrowiotrsuQuery.ParamByName('indate').AsDateTime:=formatdatetime('yyyy/mm/dd',datetimepicker1.datetime);時間從的值
mydata.BrowiotrsuQuery.ParamByName('oudate').AsDateTime:=formatdatetime('yyyy/mm/dd',datetimepicker2.datetime);時間至的值

 
對,可能就是那兩個參數的問題
 
首先,注意日期参数的格式
另外,建议用存储过程将所需数据添加到一个临时表,在从这个表中读数据
 
哥们:
你非要使用,edit控件输入日起吗? 你要是用datetimepicker多好啊,中间都不用使用日期格式转换。
 
To:各位仁兄
用datetimepicker當然是可以,不過我沒有用過,但當我照zhaixiaobo仁兄所說的用時則
系統不讓通過,不知在Query控件中的變量發我以上的SQL語句一樣重復調用有沒有影響呢?
這個我就不知道了!!!
 
在Explore中试试完整的SQL 先!
 
在SQL Server:
日期格式为:MM/DD/YYYY
 
初步判斷,可能是你的日期參數錯誤.
1.先定義itseid,indate,oudate(itseid,indate,oudate定義為string)
2.用Edit輸入date也能,不過注意日期格式是否正确.
3.Code:
itseid:=mainform.UserId; //用戶編號的值
indate:=edit1.Text; //時間從的值
oudate:=edit2.Text; //時間至的值

with query1 do
begin
close;
commandtext:='SELECT Itvadata.Itvata,SUM( Iotrsu.Itquer ) Itquer,'+
' SUM( Iosout.Isquer ) Isquer FROM Itvadata,Iotrsu,Iosout Where(( Iotrsu.ituser ='''+itseid+''' ) and'+
' ( Iotrsu.itarrive >= '+indate+' ) and ( Iotrsu.itarrive <= '+oudate+' ) and'+
' ( Iotrsu.Itvata = Itvadata.Itvata ) and ( Iosout.isvata = Itvadata.Itvata) and'+
' ( Iosout.Isseql in ( select Iooutid.itseql from Iooutid where ((ituser='''+itseid+''')and( itdate>= '+indate+' )and( itdate>= '+oudate+' )))))'+
' GROUP BY Itvadata.Itvata ';
open;
end;
 
To:winnin
commandtext為什麼類型啊!當我運行時在這句出現了錯誤!!
Undeclared identifier:'commandtext'
能詳細同小弟說說嗎?我真的不懂耶!
謝謝!
 
你试试在SQL里把日期当成字符型数据,就是字段名='日期' 就应该就是这个问题吧。
 
[blue]To:各位大俠!
我想可能只能用臨時表的方法來分兩次解決了,第一個把符合條件的資金資料分類加總
搞出來並保存成臨時表,第二個再把消費主明細表中的符合條件的資料分類加總后保存成臨
時表.然后再把兩表合並想來!我想這可能是最簡單,最方便,但同時也是最麻煩的方法了!
[以上提到的我一個都不會怎樣寫命令,只是我自各構想該如何運做,如果有哪位仁兄會的
還望賜教寫出來,謝謝!]
請各位大俠多多指點![/blue]
 
connandtext是笔误。
应该是Sql.text
 
[blue]但是把connandtext改為Sql.text后還是不行啊!
把所有日期限制取消后還是不行,看來只有用臨時表的,大俠們還望出出主意並提供幫助,
本人已基本回天無力了!!![/blue]
 
改一下:
SELECT a.Itvata,
Itquer=(select SUM( b.Itquer ) from Iotrsu b where b.ituser=:itseid and b.itarrive>=:indate and b.itarrive<=:outdate and b.Itvata=a.Itvata) ,
Isquer=(select SUM( c.Isquer ) from Iosout c where c.isvata =a.isvata and c.isseql in (select d.idseql from Iooutid d where d.ituser=:itseid and d.itdate>=:indate and d.itdate<=:outdate))
FROM Itvadata a
GROUP BY a.Itvata
//沒有測試,你不妨試試
 
TO:zxb200
謝謝您的支持!
改過了也行不通!
 
兄弟,试试使用联合查询
 
兄弟,试试使用联合查询
 
TO:xuejian
仁兄,謝謝您的幫助,您能詳細說說怎樣使用联合查询,以前我沒有搞過!!煩請復我!
謝謝!
(我是自學Delphi的沒一年!!)
 
后退
顶部