Câu hỏi

26/04/2013 21:36
Làm gì để chương trình con nhận giá trị của biến?
Trong Visual Foxpro, làm thế nào để các chương trình con có thể nhận giá trị của biến được khai báo ngay khi đăng nhập vào chương trình chính?
Tôi có viết một phần mềm phục vụ công tác bằng VFP6 và đặt toàn bộ trong thư mục "...\\GmPro\\*.*" trên USB 2.0 . Khi gắn USB vào CPU của tôi thì USB được nhận là ổ đĩa và do đó các file của chương trình được truy xuất theo đường dẫn là "G\\GmPro\\*.*" .
Vấn đề đặt ra : Khi gắn USB vào các CPU khác (có cài VFP6) thì USB có thể nhận tên là ổ đĩa khác (ví dụ : E/ F /K /...) . Lúc đó chương trình chạy đương nhiên sẽ gặp lỗi (vì nó không tìm thấy files cần thiết trên ).
Tôi có ý định khắc phục bằng cách : Ngay từ khi đăng nhập chương trình , chương trình chính có nhiệm vụ phát hiện tên ổ đĩa có chương trình chính đang chạy (Dùng hàm SYS(16,0) để phát hiện tên thủ tục đang chạy =>Suy ra ổ đĩa hiện hành) và ghi vào biến có tê ;n là 'SysPath' . Việc truy xuất files trong các chương trình con sau này được thực hiện thông qua biến 'SysPath'.
Ý định này tôi đã thực hiện thành công hoàn toàn đối với Foxpro for window (theo đó biến khai báo trong chương trình CHA thì tiếp tục tồn tại có thể sử dụng trong các chương trình CON, CHÁU, CHẮT... )
Tuy nhiên, đối với VFP6 thì các chương trình được gọi (con) không nhận ra biến đã được đã khai báo trong chương trình chính (cha) ? Lỗi do đâu? cách làm để có thể thực hiện được ý tưởng trên như thế nào?
Rất mong được các bậc tiền bối chỉ giáo!
ZiMaNo1
26/04/2013 21:36
Tôi có viết một phần mềm phục vụ công tác bằng VFP6 và đặt toàn bộ trong thư mục "...\\GmPro\\*.*" trên USB 2.0 . Khi gắn USB vào CPU của tôi thì USB được nhận là ổ đĩa
Vấn đề đặt ra : Khi gắn USB vào các CPU khác (có cài VFP6) thì USB có thể nhận tên là ổ đĩa khác (ví dụ : E/ F /K /...) . Lúc đó chương trình chạy đương nhiên sẽ gặp lỗi (vì nó không tìm thấy files cần thiết trên
Tôi có ý định khắc phục bằng cách : Ngay từ khi đăng nhập chương trình , chương trình chính có nhiệm vụ phát hiện tên ổ đĩa có chương trình chính đang chạy (Dùng hàm SYS(16,0) để phát hiện tên thủ tục đang chạy =>Suy ra ổ đĩa hiện hành) và ghi vào biến có tê ;n là 'SysPath' . Việc truy xuất files trong các chương trình con sau này được thực hiện thông qua biến 'SysPath'.
Ý định này tôi đã thực hiện thành công hoàn toàn đối với Foxpro for window (theo đó biến khai báo trong chương trình CHA thì tiếp tục tồn tại có thể sử dụng trong các chương trình CON, CHÁU, CHẮT... )
Tuy nhiên, đối với VFP6 thì các chương trình được gọi (con) không nhận ra biến đã được đã khai báo trong chương trình chính (cha) ? Lỗi do đâu? cách làm để có thể thực hiện được ý tưởng trên như thế nào?
Rất mong được các bậc tiền bối chỉ giáo!
Danh sách câu trả lời (1)

Nếu VFP không hỗ trợ truyền giá trị của biến từ chương trình mẹ đến chương trình con thì bạn có thể sử dụng một cách rất "nông dân" mà tôi vẫn thường làm:
Sau khi sử dụng chương trình mẹ sử dụng hàm hệ thống để lấy giá trị của biến Syspath mà bạn cần, bạn hãy sử dụng thêm một thủ tục ghi cái biến đó ra đĩa cứng (vào folder phổ thông nào đó mà máy nào cũng phải có, ví dụ như C:\ hay System32 chẳng hạn...) rồi chương trình con có nhiệm vụ load cái file đó để lấy giá trị biến... thế là OK?
Sau khi sử dụng chương trình mẹ sử dụng hàm hệ thống để lấy giá trị của biến Syspath mà bạn cần, bạn hãy sử dụng thêm một thủ tục ghi cái biến đó ra đĩa cứng (vào folder phổ thông nào đó mà máy nào cũng phải có, ví dụ như C:\ hay System32 chẳng hạn...) rồi chương trình con có nhiệm vụ load cái file đó để lấy giá trị biến... thế là OK?
Trả lời câu hỏi
Câu hỏi lĩnh vực Lập trình
Rao vặt Siêu Vip