史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2008-05-20, 11:50 PM   #1
飛行船大大
註冊會員
 
飛行船大大 的頭像
榮譽勳章
UID - 282126
在線等級: 級別:14 | 在線時長:264小時 | 升級還需:21小時級別:14 | 在線時長:264小時 | 升級還需:21小時級別:14 | 在線時長:264小時 | 升級還需:21小時級別:14 | 在線時長:264小時 | 升級還需:21小時
註冊日期: 2007-10-09
文章: 172
精華: 0
現金: 311 金幣
資產: 7311 金幣
預設 程式 - VB6你有遇到這樣情況嗎 ?增加資料表數據的時候,在datagrid中顯示總是少一筆條

使用VB6 + .MDB 資料庫 時
增加資料表數據的時候,在datagrid中顯示總是少一筆,增加第一條數據的時候什麼也沒顯示,但明明已經增加到數據庫裡了。增加第二筆條數據的時候顯示出第一筆條,增加第三筆的時候才顯示出第一、第二筆,但數據庫裡明明有三筆記錄了。

請問原因為何 ?
要VB6程式如何改ㄋ ?

這張圖只是查詢畫面時:下方是access 開啟資料表中共有5筆, 上方是 vb6 用datagrid卻只有顯示出前4筆. 我以前沒遇到這情形, (以前 clipper語言中, 有一個指令 commit 就是專門將最後一筆 buffer強迫寫入 ), vb6 中倒沒這種指令.

http://huhuge.hp.infoseek.co.jp/MDB.gif

此帖於 2008-05-21 06:16 PM 被 飛行船大大 編輯.
飛行船大大 目前離線  
送花文章: 178, 收花文章: 61 篇, 收花: 139 次
回覆時引用此帖
舊 2008-05-21, 10:11 AM   #2 (permalink)
長老會員
 
cwvdavid 的頭像
榮譽勳章
UID - 476
在線等級: 級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時
註冊日期: 2002-12-06
住址: 天與地的夾縫
文章: 3106
精華: 0
現金: 5256 金幣
資產: 2034465 金幣
預設

好像是指令順序的問題...
我曾經碰過, 但很久沒寫了...

我記得新增記錄之後好像要再加一行指令(移動 DataGrid的指標,移到下一筆或者做別的事)
xxxx.Recordset.MoveFirst

總之,要看到你的寫法才能判斷
__________________
姜太公釣魚~ 願者上鉤
cwvdavid 目前離線  
送花文章: 4036, 收花文章: 2466 篇, 收花: 10141 次
回覆時引用此帖
向 cwvdavid 送花的會員:
飛行船大大 (2008-05-21)
感謝您發表一篇好文章
舊 2008-05-21, 02:31 PM   #3 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9881小時 | 升級還需:115小時級別:97 | 在線時長:9881小時 | 升級還需:115小時級別:97 | 在線時長:9881小時 | 升級還需:115小時級別:97 | 在線時長:9881小時 | 升級還需:115小時級別:97 | 在線時長:9881小時 | 升級還需:115小時級別:97 | 在線時長:9881小時 | 升級還需:115小時級別:97 | 在線時長:9881小時 | 升級還需:115小時
註冊日期: 2002-12-07
文章: 13350
精華: 0
現金: 26465 金幣
資產: 3024345 金幣
預設

所以也一樣
要 步進式除錯 (先判斷大概之問題點 設個中斷,接著用 F8 配合觀察)
就可以找到哪裡會不照您的思維行事
mini 目前線上  
送花文章: 2014, 收花文章: 8005 篇, 收花: 26810 次
回覆時引用此帖
向 mini 送花的會員:
飛行船大大 (2008-05-21)
感謝您發表一篇好文章
舊 2008-05-21, 06:17 PM   #4 (permalink)
註冊會員
 
飛行船大大 的頭像
榮譽勳章
UID - 282126
在線等級: 級別:14 | 在線時長:264小時 | 升級還需:21小時級別:14 | 在線時長:264小時 | 升級還需:21小時級別:14 | 在線時長:264小時 | 升級還需:21小時級別:14 | 在線時長:264小時 | 升級還需:21小時
註冊日期: 2007-10-09
文章: 172
精華: 0
現金: 311 金幣
資產: 7311 金幣
預設

這張圖只是查詢畫面時:圖下方是access 開啟資料表中共有5筆, 圖上方是 vb6 用datagrid卻只有顯示出前4筆. 我以前沒遇到這情形, (以前 clipper語言中, 有一個指令 commit 就是專門將最後一筆 buffer強迫寫入 , vb6 中倒沒這種指令.)
所以覺得很奇怪.

http://huhuge.hp.infoseek.co.jp/MDB.gif

---源碼貼出如下 (很單純的查詢所寄出的 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, 收花文章: 61 篇, 收花: 139 次
回覆時引用此帖
舊 2008-05-22, 08:27 PM   #5 (permalink)
長老會員
 
cwvdavid 的頭像
榮譽勳章
UID - 476
在線等級: 級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時
註冊日期: 2002-12-06
住址: 天與地的夾縫
文章: 3106
精華: 0
現金: 5256 金幣
資產: 2034465 金幣
預設

你的code只有列出[查詢]的部份,
沒有提到[如何]新增...

如果你的新增, 是在別的程式新增的, 或者是跟這支程式無關,
那你應該是要[再重新查詢], 讓VB重新去讀一次資料,

(目前訪間所有的程式, 都不會一直跟資料庫保持連線偵測,
也就是說當你用VB查完資料, 如果有人 之後另外去更動資料,
那你的VB畫面是不會有變化的)
cwvdavid 目前離線  
送花文章: 4036, 收花文章: 2466 篇, 收花: 10141 次
回覆時引用此帖
向 cwvdavid 送花的會員:
飛行船大大 (2008-05-23)
感謝您發表一篇好文章
舊 2008-05-23, 04:19 PM   #6 (permalink)
註冊會員
 
飛行船大大 的頭像
榮譽勳章
UID - 282126
在線等級: 級別:14 | 在線時長:264小時 | 升級還需:21小時級別:14 | 在線時長:264小時 | 升級還需:21小時級別:14 | 在線時長:264小時 | 升級還需:21小時級別:14 | 在線時長:264小時 | 升級還需:21小時
註冊日期: 2007-10-09
文章: 172
精華: 0
現金: 311 金幣
資產: 7311 金幣
預設

cwvdavid 大大 我們又見面了

抱歉我樓上沒說明清楚 .
其實樓上圖中 資料是在pc中的硬碟中(並非查網路server端), 並且vb是在 "查詢"datagrid 顯示時就會少一筆 .
我納悶的這種情形是: 同一支程式.exe ,在我自己的電腦 中執行時一切正常. 但打包安裝在別台xp ,偶爾有些電腦 會發生 查詢時缺最後一筆資料(如貼圖).  

(我在2年前遇到過一次: 但是當時是先新增到.mdb 然後 用datagrid 顯示時也是缺最後新增的那一筆資料, 後來自己有改正確了, 現在已忘記自己當時是如何改的)
你說奇怪不奇怪

--------------------
我想另外請教cwvdavid 大大一個問題
就是有些網頁 上 會有用java語言 來即時顯示最新股市行情資料 . 這資料更新 比.html更即時也更快.
用vb6 呼叫 java語言 也能做到 達到嗎 ? 我想試寫看看試 有問題時請cwvdavid 大大 和版主不吝指點我一下
先謝謝各位了.
飛行船大大 目前離線  
送花文章: 178, 收花文章: 61 篇, 收花: 139 次
回覆時引用此帖
舊 2008-05-23, 07:56 PM   #7 (permalink)
長老會員
 
cwvdavid 的頭像
榮譽勳章
UID - 476
在線等級: 級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時
註冊日期: 2002-12-06
住址: 天與地的夾縫
文章: 3106
精華: 0
現金: 5256 金幣
資產: 2034465 金幣
預設

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我就不知道了
cwvdavid 目前離線  
送花文章: 4036, 收花文章: 2466 篇, 收花: 10141 次
回覆時引用此帖
向 cwvdavid 送花的會員:
飛行船大大 (2008-05-24)
感謝您發表一篇好文章
舊 2008-08-29, 10:25 PM   #8 (permalink)
註冊會員
 
wilsonfan 的頭像
榮譽勳章
UID - 299074
在線等級: 級別:9 | 在線時長:120小時 | 升級還需:20小時級別:9 | 在線時長:120小時 | 升級還需:20小時級別:9 | 在線時長:120小時 | 升級還需:20小時級別:9 | 在線時長:120小時 | 升級還需:20小時
註冊日期: 2008-04-22
VIP期限: 2010-10
文章: 24
精華: 0
現金: 969 金幣
資產: 56571 金幣
預設

以前有遇過,但不知為什麼,似乎是程式執行的速度太快,快過資料寫入MDB的速度,後來我是在取資料前,稍停一下,Doevents,您試試吧
wilsonfan 目前離線  
送花文章: 144, 收花文章: 8 篇, 收花: 65 次
回覆時引用此帖
向 wilsonfan 送花的會員:
飛行船大大 (2008-09-23)
感謝您發表一篇好文章
舊 2008-08-30, 02:31 PM   #9 (permalink)
註冊會員
 
mraaa711128 的頭像
榮譽勳章

勳章總數
UID - 277024
在線等級: 級別:3 | 在線時長:25小時 | 升級還需:7小時級別:3 | 在線時長:25小時 | 升級還需:7小時級別:3 | 在線時長:25小時 | 升級還需:7小時
註冊日期: 2007-08-16
文章: 51
精華: 0
現金: 105 金幣
資產: 125 金幣
預設


我在想有沒有一種可能....
就是你新增完......然後沒有下到"Commit"這個指令
所以並沒有真正完成資料內容的新增.....
但是因為你一直連著資料庫
所以新增的資料也都有保存著
直到你下了"Commit"才顯示的出來
.....不確定啦......這是再Oracle才需要啦.....
不知道MDB需不需要......
P.S. 也有可能不是"Commit"這個字眼
===>>總之就是真正存到DB裡的意思
===>>通常Save或Insert並沒有真正的存入資料庫
===>>要到下了類似"Commit"這樣的指令後才會存進資料庫!!

參考看看吧.....!!
mraaa711128 目前離線  
送花文章: 34, 收花文章: 20 篇, 收花: 26 次
回覆時引用此帖
向 mraaa711128 送花的會員:
飛行船大大 (2008-09-11)
感謝您發表一篇好文章
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 10:59 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1