Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Help] Truyền dữ liệu từ file txt vào textbox của form
#1
Như tựa đề, mình đang làm 1 cái form giám sát nhà máy. Có 1 cái sensor đo áp suất, dữ liệu trả về của nó lưu dưới dạng file .DAT hoặc .txt
Mình cần chương trình tự đọc file txt, sau đó sẽ đưa giá trị đó vào textbox "txtpkhi" của form theo thời gian.
Mình đã thử dùng hàm sau ở biến cố Timer của form:
Mã:
Private Sub Form_Timer()
   ' Xoa du lieu
   'On Error GoTo loi
       'oCmd.SetWarnings (WarningsOff)
       'DoCmd.GoToRecord , , acFirst
       'DoCmd.RunCommand acCmdDeleteRecord
       'DoCmd.SetWarnings (WarningsOn)
'loi:
       'DoCmd.Beep
   ' Cap nhat du lieu sensor do ap suat
       DoCmd.TransferText acImportDelim, , "tblApSuat", CurrentProject.Path & "\apsuat.txt", -1
       Docmd.GotoRecord,, acNext
       txtpkhi = apsuat
       Me.Refresh
End Sub
Dữ liệu vào table "tblapsuat" sau đó mình cho nó chạy ngược vào form thì gặp tình trạng là:
+ Dữ liệu lấy vào table bị lặp dữ liệu, không lấy giá trị lớn nhất
+ Mỗi lần chạy nó form lại chạy lại giá trị từ ban đầu của bảng tblapsuat chứ ko phải dữ liệu mới lấy từ txt, và nó lại tiếp tục lặp.
=> Mong các bạn trợ giúp. Đây là l_u_ậ_n v_ă_n tốt nghiệp của mình. Hic
Chữ ký của quyvt1993 Xin chào, mình là quyvt1993, Tham gia http://thuthuataccess.com/forum từ ngày 30-09 -12.
Reply
Những người đã cảm ơn
#2
Nó lặp theo kiểu:
File txt: 1 2 3 4 5
-> Table: 1 2 3 4 5
File txt: 1 2 3 4 5 6
-> Table: 1 2 3 4 5 1 2 3 4 5 6
File txt: 1 2 3 4 5 6 7
-> Table: 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 6 7
040 040
Chữ ký của quyvt1993 Xin chào, mình là quyvt1993, Tham gia http://thuthuataccess.com/forum từ ngày 30-09 -12.
Reply
Những người đã cảm ơn
#3
- Mỗi lần sensor nhảy bạn lưu thành 1 record mới trong table hay chỉ lưu đè lên record cũ?
- Giá trị lớn nhất là toàn bộ dãy số của file text? vd: File txt: 1 2 3 4 5 6 7 hay số 7 không thôi?

Nếu bạn muốn xóa record cũ thì dùng câu lệnh SQL để xóa trước khi TransferText.
CurrentDb.Execute ("DELETE * FROM tblApSuat")
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn quyvt1993
#4
Mỗi lần sensor nhảy nó cho thêm 1 số mới
Ví dụ: 10 -> 10 23 -> 10 23 35 thì áp suất đo lần I là 10, lần thứ II đo dc 23, lần thứ III là 35
Mình muốn txtpkhi của mình nhảy theo các số mới nhất. Ví dụ 10, rồi 23, rồi 35.
Như cách mình làm thì nó nhảy từ 10 23 35 chứ ko nhảy giá trị mới nhất.
Chữ ký của quyvt1993 Xin chào, mình là quyvt1993, Tham gia http://thuthuataccess.com/forum từ ngày 30-09 -12.
Reply
Những người đã cảm ơn
#5
File text của bạn cũng lưu theo dạng 10 23 35? cách nhau bằng 1 khoảng trắng " "?
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn quyvt1993
#6
File text mình lưu theo dạng này
apsuat
300
200
20
50
10
20
30
10
15
99
99
99
100
101
102
103
106
Cách nhau bằng xuống dòng
Chữ ký của quyvt1993 Xin chào, mình là quyvt1993, Tham gia http://thuthuataccess.com/forum từ ngày 30-09 -12.
Reply
Những người đã cảm ơn
#7
Nếu vậy thì bạn làm theo cách tôi nói ở trên.
- Xóa toàn bộ các records của tblApSuat => CurrentDb.Execute ("DELETE * FROM tblApSuat")
- Transfer text
- Move đến record cuối cùng rồi hiển thị lên form.
  -----------------------------------
  Dim db As DAO.Database, rs As DAO.Recordset
  Dim strAS As String
  
  Set db = Currentdb
  Set rs = db.OpenRecordset ("tblApSuat", dbOpenDynaset)
  rs.MoveLast
  strAS=rs!apsuat
  Me.txtpkhi=strAS
  rs.Close
  Set rs=Nothing
  ----------------------------------- 
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn quyvt1993
#8
Ok. Đã thành công. Cảm ơn bạn ongke0701 rất nhiều ^^ Chúc bạn 1 ngày vui vẻ  007
Mã:
' Cap nhat du lieu sensor do ap suat
           CurrentDb.Execute ("DELETE * FROM tblApSuat")
           DoCmd.TransferText acImportDelim, , "tblApSuat", CurrentProject.Path & "\apsuat.txt", -1
           Dim db As DAO.Database, rs As DAO.Recordset
           Dim strAS As String
           Set db = CurrentDb
           Set rs = db.OpenRecordset("tblApSuat", dbOpenDynaset)
           rs.MoveLast
           strAS = rs!apsuat
           Me.txtpkhi = strAS
           rs.Close
           Set rs = Nothing
Chữ ký của quyvt1993 Xin chào, mình là quyvt1993, Tham gia http://thuthuataccess.com/forum từ ngày 30-09 -12.
Reply
Những người đã cảm ơn
#9
À hỏi thêm chút là khoảng thời gian để cập nhật dữ liệu sensor là bao lâu vậy? Time Interval?
Nếu khoảng thời gian nhanh quá thì code trên chạy cũng mệt máy vì cứ xóa, chép liên tục.
Có 1 cách khác là chỉ đọc file text lấy dữ liệu gán cho biến chuỗi rồi hiển thị lên form, không cần chép vô table -> đỡ công đoạn xóa và transfer. Dùng File System object để đọc file.
Để sử dụng được công cụ FSO bạn phải thêm thư viện Microsoft Scripting Runtime.

Mã PHP:
Sub ReadFile()

Dim fso As New FileSystemObject
Dim ts 
As TextStream
Set ts 
fso.OpenTextFile("C:\apsuat.txt"ForReading)
Dim ThisLine As String
Do Until ts.AtEndOfStream
     ThisLine 
ts.ReadLine
     Me
.txtpkhi ThisLine
Loop
ts
.Close
End Sub 
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn quyvt1993
#10
(14-06-16, 02:53 PM)ongke0711 Đã viết: À hỏi thêm chút là khoảng thời gian để cập nhật dữ liệu sensor là bao lâu vậy? Time Interval?
Nếu khoảng thời gian nhanh quá thì code trên chạy cũng mệt máy vì cứ xóa, chép liên tục.
Có 1 cách khác là chỉ đọc file text lấy dữ liệu gán cho biến chuỗi rồi hiển thị lên form, không cần chép vô table -> đỡ công đoạn xóa và transfer. Dùng File System object để đọc file.
Để sử dụng được công cụ FSO bạn phải thêm thư viện Microsoft Scripting Runtime.

Mã PHP:
Sub ReadFile()

Dim fso As New FileSystemObject
Dim ts 
As TextStream
Set ts 
fso.OpenTextFile("C:\apsuat.txt"ForReading)
Dim ThisLine As String
Do Until ts.AtEndOfStream
     ThisLine 
ts.ReadLine
     Me
.txtpkhi ThisLine
Loop
ts
.Close
End Sub 

Cài đặt thư viện thế nào b chỉ giúp mình với
Chữ ký của quyvt1993 Xin chào, mình là quyvt1993, Tham gia http://thuthuataccess.com/forum từ ngày 30-09 -12.
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
Sad [Help] Tạo phần mềm từ file excel duynguyenkk 16 582 22-07-16, 03:43 PM
Bài mới nhất: duynguyenkk
  [Hỏi] Cách khôi phục bảng dữ liệu bị xóa hpolice26041993 8 314 06-07-16, 08:51 AM
Bài mới nhất: paulsteigel
  [Hỏi] Cho em hỏi access có đóng gói lại thành file chạy trên máy khác để không bị lỗi không ngochieu8109 3 340 14-06-16, 10:42 AM
Bài mới nhất: quyvt1993
  [Help] Không đặt được liên kết sub form. gmanhst 22 984 13-05-16, 04:19 PM
Bài mới nhất: gmanhst
  xuống dòng trong textbox report tieuho828 3 266 08-05-16, 09:22 PM
Bài mới nhất: maidinhdan

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ