|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2008-05-20, 11:50 PM | #1 |
註冊會員
|
程式 - VB6你有遇到這樣情況嗎 ?增加資料表數據的時候,在datagrid中顯示總是少一筆條
使用VB6 + .MDB 資料庫 時
增加資料表數據的時候,在datagrid中顯示總是少一筆,增加第一條數據的時候什麼也沒顯示,但明明已經增加到數據庫裡了。增加第二筆條數據的時候顯示出第一筆條,增加第三筆的時候才顯示出第一、第二筆,但數據庫裡明明有三筆記錄了。 請問原因為何 ? 要VB6程式如何改ㄋ ? 這張圖只是查詢畫面時:下方是access 開啟資料表中共有5筆, 上方是 vb6 用datagrid卻只有顯示出前4筆. 我以前沒遇到這情形, (以前 clipper語言中, 有一個指令 commit 就是專門將最後一筆 buffer強迫寫入 ), vb6 中倒沒這種指令. 此帖於 2008-05-21 06:16 PM 被 飛行船大大 編輯. |
送花文章: 178,
|
2008-05-21, 06:17 PM | #4 (permalink) |
註冊會員
|
這張圖只是查詢畫面時:圖下方是access 開啟資料表中共有5筆, 圖上方是 vb6 用datagrid卻只有顯示出前4筆. 我以前沒遇到這情形, (以前 clipper語言中, 有一個指令 commit 就是專門將最後一筆 buffer強迫寫入 , vb6 中倒沒這種指令.)
所以覺得很奇怪. ---源碼貼出如下 (很單純的查詢所寄出的 e-mail電子報 ) 如下------------------------ (grdEDM 就是DATAGRID的控制項 ) (DTPicker(0) DTPicker(1) 就是查詢日期 開始和結束) (資料表EDM 中 有一欄位 UseTime 是文字型態 放比對的日期) (下方quote 源碼內容 奇怪會變成沒縮排 有點難以閱讀 , 不知道如何貼源碼才會變成有縮排 ) 語法:
'查詢 Private Sub cmd_Search_Click() On Error Resume Next Dim strSDate As String, strEDate As String, dateTemp As Date Dim strRet As String Dim varRet() As String Dim varData() As String Dim intType As Integer Dim strMsg As String Dim strStatus As String Dim i As Long, j As Long Me.MousePointer = 11 cmd_Search.Enabled = False ReDim aryEID(0) If Opt1(0).Value = True Then '24小時內 strSDate = Format(DateAdd("d", -1, Now), "yyyy/mm/dd hh:mm") strEDate = Format(Now, "yyyy/mm/dd hh:mm") ElseIf Opt1(1).Value = True Then '48小時內 strSDate = Format(DateAdd("d", -2, Now), "yyyy/mm/dd hh:mm") strEDate = Format(Now, "yyyy/mm/dd hh:mm") ElseIf Opt1(2).Value = True Then '72小時內 strSDate = Format(DateAdd("d", -3, Now), "yyyy/mm/dd hh:mm") strEDate = Format(Now, "yyyy/mm/dd hh:mm") ElseIf Opt1(3).Value = True Then '一週內 strSDate = Format(DateAdd("d", -7, Now), "yyyy/mm/dd hh:mm") strEDate = Format(Now, "yyyy/mm/dd hh:mm") ElseIf Opt1(4).Value = True Then '查詢區間 If DTPicker(0) > DTPicker(1) Then '日期對調 dateTemp = DTPicker(0) DTPicker(0) = DTPicker(1) DTPicker(1) = dateTemp End If strSDate = Format(DTPicker(0), "yyyy/mm/dd hh:mm") '注意==> 一定要加Format 變更格式"yyyy/mm/dd hh:mm" 否則查不出資料 strEDate = Format(DTPicker(1), "yyyy/mm/dd hh:mm") End If If strSDate = "//" Then strSDate = "" If strEDate = "//" Then strEDate = "" If strSDate = "" And strEDate = "" Then MsgBox "請輸入查詢區間!", vbExclamation Me.MousePointer = 0 cmd_Search.Enabled = True Exit Sub End If txt_Msg.Text = "" If SSTab1.Tab = 0 Then intType = 0 If SSTab1.Tab = 1 Then intType = 1 grd.Visible = False grdEDM.Visible = False grd_List.Visible = False Select Case intType Case 0 '簡訊-資料在SERVER端 ->下載後放入Temp_EDM Case 1 '電子報 -資料在本機OnlyYou.mdb 中的 EDM 'MsgBox strSDate & vbCrLf & strEDate SQL = "Select * From EDM Where UserID = '" & UserID & "' And EdmID = 0 " If strSDate <> "" Then SQL = SQL & "And UseTime >= '" & strSDate & " 00:00:00' " If strEDate <> "" Then SQL = SQL & "And UseTime <= '" & strEDate & " 23:59:59' " SQL = SQL & "Order By SID Desc" Debug.Print SQL Set Rs = objSQL.SelecRs(SQL, ErrNum, ErrDescription) If Not Rs.EOF Then Set grdEDM.DataSource = Rs grdEDM.Refresh grdEDM.Refresh grdEDM.Visible = True Rs.MoveFirst Else MsgBox "無符合條件的資料 !" End If 'Rs.Close '注意==>不可以CLOSE 否則畫面無法顯示資料 End Select cmd_Search.Enabled = True Me.MousePointer = 0 tmpEID = 0 End Sub 此帖於 2008-05-21 08:03 PM 被 mini 編輯. 原因: 縮排 請用 [code] |
送花文章: 178,
|
2008-05-23, 04:19 PM | #6 (permalink) |
註冊會員
|
cwvdavid 大大 我們又見面了
抱歉我樓上沒說明清楚 . 其實樓上圖中 資料是在pc中的硬碟中(並非查網路server端), 並且vb是在 "查詢"datagrid 顯示時就會少一筆 . 我納悶的這種情形是: 同一支程式.exe ,在我自己的電腦 中執行時一切正常. 但打包安裝在別台xp ,偶爾有些電腦 會發生 查詢時缺最後一筆資料(如貼圖). (我在2年前遇到過一次: 但是當時是先新增到.mdb 然後 用datagrid 顯示時也是缺最後新增的那一筆資料, 後來自己有改正確了, 現在已忘記自己當時是如何改的) 你說奇怪不奇怪 -------------------- 我想另外請教cwvdavid 大大一個問題 就是有些網頁 上 會有用java語言 來即時顯示最新股市行情資料 . 這資料更新 比.html更即時也更快. 用vb6 呼叫 java語言 也能做到 達到嗎 ? 我想試寫看看試 有問題時請cwvdavid 大大 和版主不吝指點我一下 先謝謝各位了. |
送花文章: 178,
|
2008-05-23, 07:56 PM | #7 (permalink) |
長老會員
|
1. 這個要看 負責新增資料到資料庫的程式是怎麼寫的,
ADODB在連MDB時, 有很多種方式, 像什麼[樂觀鎖定, 悲觀鎖定之類的], 還有就是新增的方式, 有透過adodb來做addnew(), 也有直接利用insert into xxtable ...來完成的方式 總之, 原因很多種, 你去有問題的電腦測試時, 試看看在查詢之前...mdb是不是已經沒有程式在連了 當你用 Access打開xxx.mdb檔時, 會多出一個 xxx.ldb (Microsoft Office Access 記錄鎖定資訊) 你用VB程式在連結mdb時, 也會多出來, 當你關閉連結時, 這個xxx.ldb就會消失(此時才是沒有任何程式在存取這個檔案) 也就是說, 如果有電腦發生了 : 新增資料之後, ldb存在... 此時你用vb去查詢, 少了一筆... 那表示問題出在這裡....... 我覺得問題應該是出在... adodb.dll這個作業系統內建的元件...版本不同... 像 gdipuls.dll (GDI+ 當初遇到 jpeg病毒時, 微軟就有更新, 不過很多軟體都沒跟著更新) 我覺得可以往這方面查查看 2. 你說的是JavaScript(網頁在用的) 要用VB6 直接去呼叫JavaScript, 是不可能的, 但你可以透過[瀏覽器元件], 也就是拉一個什麼 AcxIEBrowser什麼的...,來讀取網頁, 執行內容(這個你之前就做過了) 至於怎麼利用[瀏覽器元件]來控制網頁內的JavaScript我就不知道了 |
送花文章: 4036,
|
向 cwvdavid 送花的會員:
|
飛行船大大 (2008-05-24)
感謝您發表一篇好文章 |
2008-08-30, 02:31 PM | #9 (permalink) |
註冊會員
|
我在想有沒有一種可能.... 就是你新增完......然後沒有下到"Commit"這個指令 所以並沒有真正完成資料內容的新增..... 但是因為你一直連著資料庫 所以新增的資料也都有保存著 直到你下了"Commit"才顯示的出來 .....不確定啦......這是再Oracle才需要啦..... 不知道MDB需不需要...... P.S. 也有可能不是"Commit"這個字眼 ===>>總之就是真正存到DB裡的意思 ===>>通常Save或Insert並沒有真正的存入資料庫 ===>>要到下了類似"Commit"這樣的指令後才會存進資料庫!! 參考看看吧.....!! |
送花文章: 34,
|
向 mraaa711128 送花的會員:
|
飛行船大大 (2008-09-11)
感謝您發表一篇好文章 |