Tạo dbf từ 2 dbf!

Liên hệ QC

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên đã mất
Tham gia
16/8/06
Bài viết
3,808
Được thích
4,449
Tôi có 2 dbf trong fox 7.0
+ dbf0 có những trường sau:
- SoCt: Duy nhất
- NgayCT
+ dbf1
- SoCt : lập lại và thuộc về SoCt trong dbf0
- MaHH
- Soluong
- SoTien
Chỉ hộ tôi cách để tạo dbf2 như sau
- SoCt
- NgayCt
- MaHH
- Soluong
- SoTien
Xin cám ơn.
 
Nếu bạn muốn đưa ra Excel thì làm như sau:
Dùng lần lượt các câu lệnh sau trong command window của Fox với dbf0.dbf và dbf1.dbf là 2 table ban đầu:
Select 1
Use dbf0
Select 2
Use dbf1
SELECT
dbf0.Soct,dbf0.Ngayct,dbf1.MaHH,dbf1.soluong,dbf1.SoTien FROM dbf0 LEFT JOIN dbf1 ON dbf0.Soct= Dbf1.soct
Export to D:\Data1.xls type XL5

Không biết có đúng ý bạn không?

 
Cám ơn nhiều.
1/ Bạn có thể làm giúp 1 Prg để có thể dùng lệnh Do ...
2 dbf cùng 1 thư mục ở D:\Data
2/ Nếu nhiều field quá mà nhập đủ tên field có cách gì tự động?
 
1.Từ command window gõ lệnh:
MODIFY COMMAND D:\Data\Tonghop
Trong cửa sổ Tonghop.prg vừa hiện ra copy đoạn lệnh sau:
Mã:
[FONT=Courier New][SIZE=2][COLOR=#0000ff]SET DEFAULT TO [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]"D:\Data"
[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]Select [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]1
[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]Use [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]dbf0
[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]Select [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]2
[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]Use [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]dbf1
[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]SELECT [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]dbf0.*,dbf1.* [/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]FROM [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]dbf0 [/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]LEFT JOIN [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]dbf1 [/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]ON [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]dbf0.Soct= Dbf1.soct [/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]TO [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]data1
[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]COPY TO [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]dbf2.[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]dbf
Export to [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2]Dbf2.[/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]xls type XL5
CLOSE DATABASES 
SET DEFAULT TO
return
[/COLOR][/SIZE][/FONT]
3. Lưu lại, chạy thử.

Câu lệnh Copy to *.dbf là lưu dưới dạng dbf thông thường

Bạn cũng có thể gõ code lệnh trong Notepad rồi lưu save as *.prg
Chúc thành công
 
SET DEFAULT TO "D:\Data"
SET DATE FREN
CLOSE ALL
Select 1
Use dbf0
Select 2
Use dbf1
SELECT dbf0.*,dbf1.* FOR DAY(CTOD(dbf0.NGAYHT))=15 FROM dbf0 LEFT JOIN dbf1 ON dbf0.Soctgoc= Dbf1.soctgoc
COPY TO dbf2.dbf
Export to Dbf2.xls type XL5
CLOSE DATABASES
SET DEFAULT TO
RETURN
Sao tôi thêm câu sau mà nó không chạy
FOR DAY(CTOD(dbf0.NGAYHT))=15
Bạn hoàn chỉnh hộ
 

File đính kèm

  • Data.rar
    3.7 KB · Đọc: 47
- Thay For bằng where
- Đưa Where ra cuối
- Dùng Day(dbf0.NGAYHT) vì NGAYHT là field dạng ngày sẵn, chứ không phải text --> không cần CTOD().
- thêm To dbTam để khỏi đóng Query mới tạo.
Mã:
[FONT=Courier New][SIZE=2][COLOR=#0000ff]SELECT [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#000000]dbf0.*,dbf1.* [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]FROM [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#000000]dbf0 [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]LEFT JOIN [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#000000]dbf1 [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]ON [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#000000]dbf0.Soctgoc= Dbf1.soctgoc [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]where DAY[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#000000](dbf0.NGAYhT)=15 [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]TO [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#000000]dbftam[/COLOR]
[/SIZE][/FONT][/COLOR][/SIZE][/FONT]
Bạn thử xem.
 
Thêm một tí:
đổi where như sau hợp lý hơn, kẻo dữ liệu nhiều tháng sẽ bị sai:
WHERE dbf0.NGAYHT= CTOD("15/12/07")
Còn nữa, dữ liệu trong field SoCtgoc của cả 2 table phải giống nhau, không được như AA111 và Aa111 hoặc aa111
Hey! Bạn làm gì mà xài Fox vậy?
 
Lần chỉnh sửa cuối:
ptm0412 đã viết:
Thêm một tí:
đổi where như sau hợp lý hơn, kẻo dữ liệu nhiều tháng sẽ bị sai:
WHERE dbf0.NGAYHT= CTOD("15/12/07")
Còn nữa, dữ liệu trong field SoCtgoc của cả 2 table phải giống nhau, không được như AA111 và Aa111 hoặc aa111
Hey! Bạn làm gì mà xài Fox vậy?
FROM dbf0 LEFT JOIN dbf1 ON dbf0.Soctgoc= Dbf1.soctgoc where DAY(dbf0.NGAYhT)=15 TO dbftam
Cám ơn rất nhiều!
Mấy hôm nay tôi cứ phải làm query tạo dbf mới và export.
1/ Aa hay AA đã xử lý trong form rồi, dl này lấy ra từ CT nhưng muốn chuyển qua Excel để in cho lẹ hơn.
2/ dbf0 left join dbf1 on [field] có phải là 1 dbf0 và nhiều dbf1?
3/ Vậy muốn dbftam sort theo ngày thì thêm lệnh gì, làm thế nào bỏ field soctgoc_b, và soctgoc_a thì sửa thành soctgoc vì nó tạo ra 2 field.
4/ Pro hơn nữa khi Do tonghop thì mở Excel và mở dbf2.xls luôn được không?
Hôm nào offline cho vui nhé.
 
ThuNghi đã viết:
2/ dbf0 left join dbf1 on [field] có phải là 1 dbf0 và nhiều dbf1?
Đúng thế, mối quan hệ là One To Many, dbf0 là One, dbf1 là many
3/ Vậy muốn dbftam sort theo ngày thì thêm lệnh gì, làm thế nào bỏ field soctgoc_b, và soctgoc_a thì sửa thành soctgoc vì nó tạo ra 2 field.
muốn sort theo trường Ngayct thì thêm vào cuối câu lệnh select:
ORDER BY Ngayct

4/ Pro hơn nữa khi Do tonghop thì mở Excel và mở dbf2.xls luôn được không?
Hôm nào offline cho vui nhé.
Thêm 1 câu lệnh ngay trước return : !dbf2.xls
Muốn thoát ra khỏi Fox luôn thì thay RETURN bằng QUIT
 
Quên còn vụ này, sorry trước, hôm qua khi mình không muốn hiện cái query, mình thêm TO dbtam, nhưng như vậy vùng làm việc vẫn còn là select 2, các lệnh copy và Export thực hiện trên vùng làm việc hiện hành nên copy và Export dbf1. Kết quả dbf2 = dbf1.
Vậy sửa lại là
Mã:
[COLOR=#0000ff]SELECT [/COLOR][FONT=Courier New][SIZE=2][COLOR=#000000]dbf0.*,dbf1.* [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]FROM [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#000000]dbf0 [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]LEFT JOIN [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#000000]dbf1 [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]ON [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#000000]dbf0.Soctgoc= Dbf1.soctgoc [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff]WHERE [/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#000000][/COLOR][/SIZE][/FONT]NgayHT = [COLOR=blue]CTOD[/COLOR]("15/12/07") [COLOR=blue]ORDER BY[/COLOR] NgayHT [COLOR=blue]NOWAIT
[/COLOR]
Còn copy to dbf2.dbf nếu không cần thì bỏ đị
 
Cám ơn nhiều! Quên mất, chia 5 lon của BNTT đó.
Pro trên OK rồi, chỉ còn !dbf2.xls thì hiện ra màn hình Dos và quit luôn, cái này trước đây mình đã tự làm nhiều lần Run Xls từ Fox, nó cũng hay hiện như thế. Nhưng cũng không sao. Chịu khó mở excel
Còn cho mình hỏi thêm
Từ Fox có thể export data và 1 sh Data của file có sẵn không file DuLieu2007. Tức là chỉ vào thẳng sh Data file DuLieu2007 mà không phải tạo mới, vì file DuLieu2007 còn có những sh khác. Thay vì mở 2 file và copy thì Fox làm luôn í mà.
Hỏi nhiều quá. Cám ơn nhé.
 
Pro trên OK rồi, chỉ còn !dbf2.xls thì hiện ra màn hình Dos và quit luôn
Mình chạy nó có vô DOS mở ra file xls mà! còn Fox quit ngon lành. Hay tại mình xài Fox 9? Thôi bạn dùng Return đi, Fox từ từ Quit sau.
Còn thêm sheet mới hay append vô sheet cũ hồi năm nẳm mình học (Fox2.6) là đều không được, không biết Fox bây giờ sao.
Còn 5 lon bạn phải nói với BNTT trừ nợ cho mình. Hihi. Bạn rủ mình ofline mà bạn đang ở đâu? mình ở GVấp, làm việc ở Tân Bình. Nếu có thì rủ đông cho vui và hao. Mình tính nhắn tin cho bạn thì không thấy chỗ nhắn, mail thì GPE nói bạn không chịu nhận.
 
Nếu bạn muốn đưa ra Excel thì làm như sau:
Dùng lần lượt các câu lệnh sau trong command window của Fox với dbf0.dbf và dbf1.dbf là 2 table ban đầu:
Select 1
Use dbf0
Select 2
Use dbf1
SELECT
dbf0.Soct,dbf0.Ngayct,dbf1.MaHH,dbf1.soluong,dbf1.SoTien FROM dbf0 LEFT JOIN dbf1 ON dbf0.Soct= Dbf1.soct
Export to D:\Data1.xls type XL5

Không biết có đúng ý bạn không?


Cho mình hỏi với. Mình có 1 file .dbf với rất nhiều trường và rất nhiều dòng. Khi mình export ra excel thì nó không ra hết các dòng. Mình phải làm thế nào để lấy toàn bộ dữ liệu được vậy? Mình không cần tất cả các trường. Cám ơn bạn.
 
Cho mình hỏi với. Mình có 1 file .dbf với rất nhiều trường và rất nhiều dòng. Khi mình export ra excel thì nó không ra hết các dòng. Mình phải làm thế nào để lấy toàn bộ dữ liệu được vậy? Mình không cần tất cả các trường. Cám ơn bạn.
theo mình biết thì excel 2003 có hơn 65,000 dòng và 2007 có hơn 1,000,000 dòng. DBF của bạn có bao nhiêu dòng mà không ra hết?
 
Web KT
Back
Top Bottom