2017-06-08 100 views
0

你好,我有下面的下面的代碼...mysql和VB6,存儲過程

DELIMITER $$ 

USE `gateshms`$$ 

DROP PROCEDURE IF EXISTS `SP_Rank_by_Company`$$ 

CREATE DEFINER=`gates`@`%` PROCEDURE `SP_Rank_by_Company`(PETSA VARCHAR(50),ins VARCHAR(200)) 
BEGIN 
    IF ins = "DELETE" THEN 

     DELETE FROM tblrevrankreport WHERE xdate = PETSA; 

    ELSEIF ins = "INSERT" THEN 

     INSERT INTO tblrevrankreport (ndate, xDate, tid, transid, rmno, rmcat, rmcatdesc, rmtariff, 
      marketdesc, cindate, coutdate, 
      mulrate, 
      revamt, 
      othamt, 
      Company) 
     SELECT a.xDate, a.xDate, b.id, a.guestno, a.roomno, b.RoomCat, b.roomcat, b.Room_Tariff, 
      b.Market, b.CInDate, b.coutdate, 
      b.MultipleRate, 
      IF(c.ratecode=1,(a.amount-(a.AMT_VAT+a.AMT_SC+a.AMT_LT)),''), 
      IF(c.ratecode<>1,(a.amount-(a.AMT_VAT+a.AMT_SC+a.AMT_LT)),''),b.Company 
      FROM tbltransactionpostingdumy a 
      LEFT JOIN tblcustomerinfo b ON a.MaintransNo = b.transactionID 
      LEFT JOIN tblreftransaction c ON a.trcode = c.xcode 
      WHERE a.xDate = PETSA AND c.xcat = 'ROOM CHARGE'; 

    ELSEIF ins = "UPDATE_NNN1" THEN 

     UPDATE tblrevrankreport tr INNER JOIN tblcustomerinfohistory tc 
      ON tr.xDate = tc.xDate 
       AND tr.`transid` = tc.`TransactionID` 
       AND tr.`xDate` = PETSA 
       AND tr.COutDate > tr.xdate 
       AND (tr.rmcat <> 'PQ' OR tr.rmcat <> 'Walkin') 
     SET tr.nyts = 1, 
      tr.NoOfAdult = tc.NoOfAdult, 
      tr.NoOfChild = tc.NoOfChild; 

    ELSEIF ins = "UPDATE_NNN2" THEN 

     UPDATE tblrevrankreport 
     SET 
      nyts = '0', 
      NoOfAdult = '0', 
      NoOfChild = '0' 
     WHERE xdate = PETSA 
      AND coutdate<=xdate; 

    ELSEIF ins = "UPDATE_ROOMTARIFFDESC" THEN 

     UPDATE tblrevrankreport,tblroomrate 
     SET tblrevrankreport.`rmtariffdesc` = tblroomrate.`rateDesc` 
     WHERE tblrevrankreport.rmtariff = tblroomrate.`room_type` 
     AND tblrevrankreport.xdate = PETSA; 

    ELSEIF ins = "UPDATE_ROOMDESC" THEN 

     UPDATE tblrevrankreport,tblroom 
     SET tblrevrankreport.`rmdesc` = tblroom.`roomdesc` 
     WHERE tblrevrankreport.`rmno` = tblroom.`Room_No` 
     AND tblrevrankreport.xdate = PETSA; 

    ELSEIF ins = "UPDATE_MARKETCODE" THEN 

     UPDATE tblrevrankreport,tblcmarket 
     SET tblrevrankreport.marketCode = tblcmarket.`xCode` 
     WHERE tblcmarket.`xDesc` = tblrevrankreport.`marketdesc` 
     AND tblrevrankreport.xdate = PETSA; 
    END IF; 
    END$$ 

DELIMITER ; 

對於某些報告,因爲我不能在手術過程中添加一個進度條正在運行(這將引領應用程序中沒有響應),我添加了一個名爲「插件」只是爲了節省每次查詢的整個過程則在其之間添加一定的UI操作變量,見下面的代碼:

Public Sub processRevRank(ByVal MyDate1 As String, ByVal MyDate2 As String) 

    '-- LATEST CODE AS OF JUNE 08, 2017 
    Dim RSC As ADODB.Recordset 
    Dim sDate As String 
    sDate = Format(MyDate1, "yyyy-mm-dd") 

    Dim xDays As Integer 
    If MyDate1 = "" And MyDate2 <> "" Then 
     MyDate2 = MyDate1 
     xDays = DateDiff("d", MyDate2, MyDate2) 
    ElseIf MyDate1 <> "" And MyDate2 = "" Then 
     MyDate1 = MyDate2 
     xDays = DateDiff("d", MyDate1, MyDate1) 
    ElseIf MyDate1 <> "" And MyDate2 <> "" Then 
     xDays = DateDiff("d", MyDate1, MyDate2) 
    Else 
     Unload frmLoadingReports 
     Exit Sub 
    End If 

    Dim xWidth As Integer 
    If xDays <> 0 Then 
     xWidth = 886/xDays 
    Else 
     xWidth = 886 
    End If 

    Do Until CDate(sDate) > CDate(MyDate2) 
     frmLoadingReports.lblTitle.Caption = "PROCESSING (Rank by Company : " & sDate & ")" 

     frmLoadingReports.lblLoadingTitleBack.Caption = "Deleting Records" 
     frmLoadingReports.lblLoadingTitleFront.Caption = "Deleting Records" 
     frmLoadingReports.picLoading.Width = frmLoadingReports.picLoading.Width + xWidth 
     DoEvents 

     Set RSC = Nothing 
     Set RSC = OpenRS("CALL SP_Rank_by_Company('" & sDate & "','DELETE')") 

     frmLoadingReports.lblLoadingTitleBack.Caption = "Inserting Records" 
     frmLoadingReports.lblLoadingTitleFront.Caption = "Inserting Records" 
     frmLoadingReports.picLoading.Width = frmLoadingReports.picLoading.Width + xWidth 
     DoEvents 

     Set RSC = Nothing 
     Set RSC = OpenRS("CALL SP_Rank_by_Company('" & sDate & "','INSERT')") 

     frmLoadingReports.lblLoadingTitleBack.Caption = "Updating Records" 
     frmLoadingReports.lblLoadingTitleFront.Caption = "Updating Records" 
     frmLoadingReports.picLoading.Width = frmLoadingReports.picLoading.Width + xWidth 
     DoEvents 

     Set RSC = Nothing 
     Set RSC = OpenRS("CALL SP_Rank_by_Company('" & sDate & "','UPDATE_NNN1')") 

     frmLoadingReports.lblLoadingTitleBack.Caption = "Updating Room Tariff Description" 
     frmLoadingReports.lblLoadingTitleFront.Caption = "Updating Room Tariff Description" 
     frmLoadingReports.picLoading.Width = frmLoadingReports.picLoading.Width + xWidth 
     DoEvents 

     Set RSC = Nothing 
     Set RSC = OpenRS("CALL SP_Rank_by_Company('" & sDate & "','UPDATE_ROOMTARIFFDESC')") 

     frmLoadingReports.lblLoadingTitleBack.Caption = "Updating Room Description" 
     frmLoadingReports.lblLoadingTitleFront.Caption = "Updating Room Description" 
     frmLoadingReports.picLoading.Width = frmLoadingReports.picLoading.Width + xWidth 
     DoEvents 

     Set RSC = Nothing 
     Set RSC = OpenRS("CALL SP_Rank_by_Company('" & sDate & "','UPDATE_ROOMDESC')") 

     frmLoadingReports.lblLoadingTitleBack.Caption = "Updating Marketcode" 
     frmLoadingReports.lblLoadingTitleFront.Caption = "Updating Marketcode" 
     frmLoadingReports.picLoading.Width = frmLoadingReports.picLoading.Width + xWidth 
     DoEvents 

     Set RSC = Nothing 
     Set RSC = OpenRS("CALL SP_Rank_by_Company('" & sDate & "','UPDATE_MARKETCODE')") 

     sDate = DateAdd("d", 1, MyDate1) 
     sDate = Format(sDate, "yyyy-mm-dd") 
    Loop 

    frmLoadingReports.lblLoadingTitleBack.Caption = "Done" 
    frmLoadingReports.lblLoadingTitleFront.Caption = "Done" 
    frmLoadingReports.picLoading.Width = 5320 
    DoEvents 

    'timer for closing 
    frmLoadingReports.Timer4.Enabled = True 

    Exit Sub 
End Sub 

我仍然不滿意因爲沒有響應仍然發生,所以我想在切換查詢中的UPDATE部分,因爲ui掛起了這部分按交易和按日期。

我的問題是... 如何使用SELECT table1創建一個存儲過程,然後使用選定的記錄更新table2並循環它,直到某個條件滿足爲止?任何簡單的SQL存儲過程循環選擇和更新?

謝謝!

+0

與其試圖在UI中解決此問題(或者作爲第一步),您是否滿意自己調整了數據庫以儘可能有效地運行這些查詢? – DaveInCaz

+0

是的,明白了,那是我使用WinXP在vmware上運行項目的。謝謝! –

回答

0

與其試圖在UI中解決此問題(或者作爲第一步),您是否滿意自己調整了數據庫以儘可能有效地運行這些查詢?