Tôi có file excel là Data, nhờ các anh chị hướng dẫn giúp viết code để đưa dữ liệu từ file data sh data vào file chtuct.dbf theo đúng các trường tương ứng với cột của sh Data.
Xin cám ơn.
Bạn giúp trong file kèm.
Cám ơn Phúc nhiều lắm. Bên a dùng ct viết trên fox nhưng mấy bước cập nhật mã HH ... nó phải qua nhiều bước nhiêu khê quá. Từ Fox thì anh cũng học hỏi từ em lấy data từ Ex rồi.quỏa,
cái này chỉ cần đổi đuôi thôi anh àh, chỉ có từ fox convert sang excel thì mới viết thôi vì trong file excel bị giới hạn số record nhận, còn từ excel sang dbf thì dễ lắm, dbf không bị giới hạn số record, hình như chỉ giới hạn dung lương thôi thì phải, mình làm thế này:
đang đứng ở excel, anh bung hết các column ra hết, đừng để bị che chữ, nếu không sang DBF sẽ bị mất phần bị che đó,
---> save as
---> chọn save as type là DBF, có nhiều version, em chọn DBF4 (vì em thấy nó...mới nhất), còn mục file name thì phải đặt tên không có khoảng trắng
---> Ok,
sau đó phải đóng file excel lại thì mới mở cái file có đuôi dbf đó ra được
thấy anh hay dùng fox nhỉ,
Tạm thời bỏ dòng đó.Screen.MousePointer = vbHourglass
Dim cnEx As ADODB.Connection
Dim recEx As ADODB.Recordset
Dim cnFox As New ADODB.Connection
Dim rsFox As New ADODB.Recordset
Dim tb As String, myPath As String
Dim i As Long
Sub ConvertExToFox()
'Screen.MousePointer = vbHourglass
'Screen.MousePointer = 11
Set cnEx = New ADODB.Connection
Set cnFox = New ADODB.Connection
tb = ThisWorkbook.FullName
myPath = ThisWorkbook.Path
cnEx.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & tb & ";Persist Security Info=False; Extended Properties=Excel 8.0;"
cnEx.Open
Set recEx = New ADODB.Recordset
'recEx.Open "select * from [Data$] where matkco like 'GTGT01-3LL'and KHHD like 'DN/00B'", cnEx, adOpenKeyset, adLockOptimistic
recEx.Open "select * from [Data$] where matkco like '1111'", cnEx, adOpenKeyset, adLockOptimistic
cnFox.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB=" & myPath & "\;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;"
cnFox.Open
Set rsFox = New ADODB.Recordset
rsFox.CursorLocation = adUseClient
'rsFox.Open "select * from chtuct where idsector = ''", cnFox, adOpenKeyset, adLockOptimistic
rsFox.Open "select * from chtuct ", cnFox, adOpenKeyset, adLockOptimistic
While Not recEx.EOF
'appen
rsFox.AddNew
For i = 0 To recEx.Fields.Count - 1
rsFox(recEx(i).Name) = recEx(i)
Next i
rsFox.Update
recEx.MoveNext
Wend
recEx.Close
Set recEx = Nothing
rsFox.Close
Set rsFox = Nothing
cnEx.Close
Set cnEx = Nothing
cnFox.Close
Set cnFox = Nothing
'Screen.MousePointer = vbDefault
'Screen.MousePointer = 0
End Sub
Sau khi google và may quá gặp bài của anh Sealand tại link sau
http://www.giaiphapexcel.com/forum/showthread.php?15637-Giúp-đỡ-về-code-cho-CT-nhập-xuất-tồn-kho&
Tôi xào lại theo code trên nhưng hiện vẫn chưa hiểu, báo lỗi.
Tạm thời bỏ dòng đó.
Code sau là lấy những dòng từ sh Data mà TK Có =1111
Anh Sealand giải thích giúp em cách xóa hoàn toàn dbf từ ex.
Em mới nghiên cứu tới đó.
PHP:Dim cnEx As ADODB.Connection Dim recEx As ADODB.Recordset Dim cnFox As New ADODB.Connection Dim rsFox As New ADODB.Recordset Dim tb As String, myPath As String Dim i As Long Sub ConvertExToFox() 'Screen.MousePointer = vbHourglass 'Screen.MousePointer = 11 Set cnEx = New ADODB.Connection Set cnFox = New ADODB.Connection tb = ThisWorkbook.FullName myPath = ThisWorkbook.Path cnEx.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & tb & ";Persist Security Info=False; Extended Properties=Excel 8.0;" cnEx.Open Set recEx = New ADODB.Recordset 'recEx.Open "select * from [Data$] where matkco like 'GTGT01-3LL'and KHHD like 'DN/00B'", cnEx, adOpenKeyset, adLockOptimistic recEx.Open "select * from [Data$] where matkco like '1111'", cnEx, adOpenKeyset, adLockOptimistic cnFox.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB=" & myPath & "\;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;" cnFox.Open Set rsFox = New ADODB.Recordset rsFox.CursorLocation = adUseClient 'rsFox.Open "select * from chtuct where idsector = ''", cnFox, adOpenKeyset, adLockOptimistic rsFox.Open "select * from chtuct ", cnFox, adOpenKeyset, adLockOptimistic While Not recEx.EOF 'appen rsFox.AddNew For i = 0 To recEx.Fields.Count - 1 rsFox(recEx(i).Name) = recEx(i) Next i rsFox.Update recEx.MoveNext Wend recEx.Close Set recEx = Nothing rsFox.Close Set rsFox = Nothing cnEx.Close Set cnEx = Nothing cnFox.Close Set cnFox = Nothing 'Screen.MousePointer = vbDefault 'Screen.MousePointer = 0 End Sub
Nhờ các bạn hướng dẫn tại sao.recFox.Update
Dim cnEx As ADODB.Connection
Dim recEx As ADODB.Recordset
Dim cnFox As New ADODB.Connection
Dim recFox As New ADODB.Recordset
Dim wbName As String, foxName As String, myPath As String
Dim iC As Long, iR As Long, endR As Long, endC As Long
Dim ArrData()
Sub ConvertExToFoxArr()
'Khai bao ten file
wbName = ThisWorkbook.FullName
myPath = ThisWorkbook.Path
With Sheets("Data")
endR = .Cells(65000, 1).End(xlUp).Row
endC = .Cells(1, 256).End(xlToLeft).Column
ArrData = .Range("A1").Resize(endR, endC).Value
' .Range("A1").Resize(endR, endC).Select
End With
KetNoiFox
cnFox.Open
'Khai Bao ten file DBF
foxName = "chtuct.dbf"
'foxName = myPath & "\" & foxName
'xoa toan bo dbf con appen thi bo dong Execute sau
cnFox.Execute "delete from " & foxName
recFox.Open "select * from " & foxName & Chr(10), cnFox, adOpenKeyset, adLockOptimistic
For iR = 2 To UBound(ArrData, 1)
recFox.AddNew
For iC = 1 To UBound(ArrData, 2)
recFox(ArrData(1, iC)) = ArrData(iR, iC)
Next iC
recFox.Update
Next iR
BoKetNoiFox
Erase ArrData
End Sub
Sub KetNoiFox()
Set cnFox = New ADODB.Connection
cnFox.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB=" & myPath & "\;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;"
Set recFox = New ADODB.Recordset
recFox.CursorLocation = adUseClient
End Sub
Sub BoKetNoiFox()
recFox.Close
Set recFox = Nothing
cnFox.Close
Set cnFox = Nothing
End Sub
Đôi với file .dbf, khi dùng lệnh trên thì xóa các record nhưng còn một vấn đề là, các record trên chỉ mới đánh dấu thôi, chưa xóa hẳn hoàn toàn, phải vào fox mở file .dbf và dùng lệnh pack mới xóa hoàn toàn.Để xóa tất cả record trong một table làm thế này
cnFox.Execute "delete from tblYourTable"
Nếu muốn xóa các record thỏa mãn các điều kiện thì thêm WHERE
cnFox.Execute "delete from tblYourTable where matkco like '1111' "
Đôi với file .dbf, khi dùng lệnh trên thì xóa các record nhưng còn một vấn đề là, các record trên chỉ mới đánh dấu thôi, chưa xóa hẳn hoàn toàn, phải vào fox mở file .dbf và dùng lệnh pack mới xóa hoàn toàn.
Vậy nhờ các bạn viết giúp câu lệnh VBA xóa hẳn các record trên file .dbf giúp tựa như mở file dbf và
1/ Dele All
2/ Pack
Hay là
Zap.
Xin cám ơn.
Nội dung topic này là đưa dữ liệu từ ex vào fox mà. Có những dbf mà trường maHH là key nên không thể trùng mã được. Thay vì thủ công trước khi xử lý mình mở dbf và dùng lệnh Zap, nhưng như vậy chưa pro nên muốn viết dòng lệnh từ VBA luôn. Những trường hợp xảy ra là đưa lần 1 sai nên mới update lại mà mahh cũ chưa bị xóa hẳn nên lệnh recordupdate kg thực hiện.Xin phép cheng ngang bài của Thầy 1 tí trước khi các Thầy cùng trao đổi chia sẻ các câu lệnh VBA xóa hẳn các record của các tập tin dbf.
Thế trong chương trình viết bằng Visual Fox, Foxpro của Thầy sau Thầy không thực hiện lệnh Zap, Pack này trước khi thoát chương trình. Ngoại trừ, Thầy lấy các tập tin dbf đó xử lý thô mới gặp tình trạng trên.
Các bạn giúp mình phần pack hay zap file dbf bằng VB với.Tôi dùng code sau để đưa dữ liệu từ Ex file Data.xls sh Data sang chtuct.dbf nhưng 2 file trên phải nằm chung 1 folder, nay tôi muốn tách file Data.xls sang folder khác dù đã khai báo path rồi mà vẫn báo lỗi dòng
Nhờ các bạn hướng dẫn tại sao.
Xin cám ơn.
Phải cài file VFBODBC để khai báo DNS ODBC.
Convert cả sh vào data còn được vậy convert chỉ 1 field sẽ dễ hơn. Mình sẽ chọn phần cần convert hay là mình làm thêm 1 sh chỉ có tên lấy từ sh trước và convert sh đó.các anh có thể viết dúp em như thề này được không?
trong excel của em co nhiều cột stt-ho va ten- nam sinh....
và một database DBF khi convert thi no chỉ vào ten thôi giả sử B3 là tên thì nó cập nhật tên người đó vào database vào phan ten còn lại không vào cái gì hết.
cảm ơn các anh nhiều