PDA

View Full Version : Nhờ giúp đỡ: Dự án quản lý phòng mạch có 2 máy có nối mạng bằng Access



bdkhoi296
29-01-2004, 15:40
Thật ra mình chỉ mới học lập trình. Nếu học mà không thực hành thì sẽ mau quên lắm, cho nên mình nhận đại mấy đề án đó về viết thử (dĩ nhiên là miễn phí). Ý tưởng thì rất nhiều, nhưng để diễn đạt chúng thành những dòng code thì chắc có lẽ vài ba năm nữa!!! Vì vậy mình rất vui và hạnh phúc nếu các bạn hướng dẫn mình. Trong quá trình học hỏi, nếu mình có “ngu” quá thì xin các bạn đừng nóng giận và bỏ qua cho nhé!

Ý tưởng về phần mềm quản lý phòng mạch bằng Access chạy trên 2 máy nối mạng ngang hàng:
- Một máy tạm gọi là client. Máy này chỉ có nhiệm vụ nhập tên bệnh nhân mới hoặc lọc theo tên bệnh nhân tái khám. Client chỉ hiển thị một form duy nhất (như hình vẽ). Trong subform “Bệnh nhân” liệt kê tất cả tên bệnh nhân đã khám từ trước đến giờ. Khi người dùng đánh tên vào trong textbox “Tên bệnh nhân” thì subform cũng sắp xếp theo sự input của người dùng. Nếu sau khi đánh xong mà tên vẫn chưa có thì người dùng click button “Chuyển cho bác sĩ”, đồng thời tên bệnh nhân mới này cũng sẽ được nhập vào trong subform ấy. Trường hợp đến tái khám thì cũng click vào button ấy. Nhiệm vụ của client chỉ có vậy 
- Sau khi click “Chuyển cho bác sĩ” thì một máy khác, gọi là máy server, lúc này cũng đang mở form ấy (nhưng được quyển mở tất cả chức năng như một administrator). Bên dưới subform chỉ liệt kê tên bệnh nhân đến khám (cả tái khám lẫn khám mới) trong ngày theo thứ tự mà client đã cung cấp, còn có thêm một cột tạm gọi là new, nếu có bệnh nhân mới thì tên cũng được đưa vào subform ấy (từ client), và cột new có dấu check để phân biệt với bệnh nhân mới và tái khám.

Mình đang gặp khó khăn như vậy, còn các vấn đề khác nếu “bí” mình sẽ xin cứu bồ.
Vậy xin các bạn ra tay nghĩa hiệp giúp mình học hỏi thêm. Xin các bạn hướng dẫn càng chi tiết càng tốt. Đoạn code lần trước mình chạy không được….

Mình xin tặng bạn nào hướng dẫn mình gỡ bí quyển sách "Building a Vitual Private Networking" (dĩ nhiên bằng tiếng Anh).
Chân thành cám ơn các bạn đã đọc message.

7604
30-01-2004, 23:57
Có nhiều cách thực hiện, tùy theo phương pháp tiếp cận của cá nhân. Trước hết nên tạo ra từng bước tiến hành và những yêu cầu cần thiết.

- Trên client box, với nhiệm vụ là nhập tên bệnh nhân nếu chưa có trong database hoặc kéo tài liệu ra từ database nếu đã có sẵn. Vì vậy trước hết phải thiết lập database. Tên, tuổi, địa chỉ, số nhà, số điện thọai, số hồ sơ, bệnh án, ngày nhập viện...quan trọng nhất ở đây là thiết lập database sau cho phù hợp và có khả năng phát triển. Nếu như sử dụng 1 table thì đơn giản nhưng sẽ gặp trở ngại về sau, nên thiết lập một access file với nhiều table liên hệ. Sau khi database hoàn chỉnh thì nhiệm vụ của client box chỉ là sử dụng VBA với Jet-engine để tìm dữ liệu trong database. Dữ liệu có thể nhập tên hay số điện thoại hay số nhà bằng SQL query và trả lại tất cả những dữ liệu cần thiết lên màn hình. Thay vì sử dụng textbox để hiển thị dữ liệu thì có thể dùng dạng khác để nhận lại nhiều dữ liệu hơn. Cái scroll box bên dưới cũng không cần thiết khi tất cả những dữ liệu được trả thẳng lên màn hình. Nếu thiết lập một templet trên excel thì có thể trả dữ liệu thẳng vào excel.

- Khi có thể thực hiện trên client box thì database cũng có thể chuyển sang server box mà không ảnh hưởng gì. Nếu sử dụng excel templet thì chỉ cần save templet thì bên server sẽ nhận đủ thông tin bằng cách mở templet đó và nhập dữ liệu trực tiếp toàn phần hay bán phần tùy theo yêu cầu của phòng mạch. Nếu không thích sử dụng templet thì cần phải thiết lập socket cho chương trình client-server. Cũng tương đối đơn giản thôi, không nhất thiết phải là lập trình viện mới có thể viết được. Chỉ cần bỏ công ra tìm hiểu. Các sách về DAO và socket thường có những ví dụ gần giống như yêu cầu trên.

- Nhìn chung thì những việc cần làm là thiết lập database, tìm cách hoạt động của ADO mà ở đây chỉ cần Jet-engine nên rất đơn giản và client-server socket hoặt design templet.
==============

ITbaby
31-01-2004, 00:28
Anh có thể kiếm 1 Module về Network (nếu không thích dùng Winsock). Bây giờ nếu có Module đó rồi. Nếu không có thì và Net mà search, tùy theo anh lập trình = ngôn ngữ nào mà tìm Code cho ngôn ngữ đó. Có thể lấy các Ví dụ về Chat cũng được. Bây giờ thì có 2 Module (trong VD vừa Down về) 1 cái là phần Server, 1 cái là Client. Anh hãy xem sơ wa Code của nó, hiểu nó 1 xíu. Vậy thì bây giờ nếu anh đã hiểu rồi thì anh có thể làm như sau. Khi Client gởi yêu cầu lên ( Truyền tới Port mà Server nhận dữ liệu-- Cái này đọc trong Code là hiểu liền à). Nếu theo chương trình này thì chỉ có 1 trường phân biệt đó là Tên bệnh nhân (còn cái bệnh nhân gì gì đó trong Form của anh thì em 0 hiểu) Lúc này khi Send cho Server thì Server sẽ có nhiệm vụ thao tác với Database, Tìm kiếm, phân loại và trả về kết quả.
-Kết quả trả về từ Server thì sẽ có nhiều kết quả chẳng hạn :
+ Nếu bệnh nhân cũ thì trả về chuỗi kết quả có 2 trường : 1 là ID câu lệnh, 2 là dòng mô tả. ở phía Client chỉ việc lấy ID và dòng mô tả để hiện ra thôi
+ Nếu bệnh nhân là mới thì ta trả về kết quả là chưa có thông tin, đòi phải nhập chi tiết thêm rồi send la.i
+..& more.....

Nếu mà làm theo mô hình Client - Server thì mình không cần phía Client tương tác với dữ liệu hệ thống chỉ cần Server là đủ, Kiểu chương trình này giống với các chương trình quản lý phòng Net hay Games nhưng có điều quy mô nhỏ hơn.

Trên đây chỉ là phác thảo về ý tưởng làm chương trình theo kiểu Client - Server mà Server đảm trách mọi công việc về xử lý dữ liệu ( Điều này bảo mật hơn :D), phía Client chỉ gởi yêu cầu và nhận kết quả thể hiện thôi.
----------

poor_boss35
31-01-2004, 18:04
Thật ra mình chỉ mới học lập trình. Nếu học mà không thực hành thì sẽ mau quên lắm, cho nên mình nhận đại mấy đề án đó về viết thử (dĩ nhiên là miễn phí). Ý tưởng thì rất nhiều, nhưng để diễn đạt chúng thành những dòng code thì chắc có lẽ vài ba năm nữa!!! Vì vậy mình rất vui và hạnh phúc nếu các bạn hướng dẫn mình. Trong quá trình học hỏi, nếu mình có “ngu” quá thì xin các bạn đừng nóng giận và bỏ qua cho nhé!

Chào bdkhoi296 ! mình cũng đang bước vào tin học mình đang muốn làm vài thứ, nhưng chẳng có ý tưởng gì cả. Bạn nói là có nhiều ý tưởng phần mềm vậy có thể cho mình vài ý kiến! Mình muốn làm cái gì đó thiết thực ! gưi cho mình vào hòm thư theo đia chỉ: Email: poor_boss35@yahoo.com
Thank you so much !

7604
31-01-2004, 22:10
Chào ITbaby, bạn đúng là một dân IT chuyên nghiệp. Về lý thuyềt mô hình server-client hay thin-client thì mọi tính toán được sử lý trên server. Điều này không chỉ tăng an toàn về bảo mật mà chủ yếu là sử dụng tài nguyên trên server và giảm sự truyền tải trên mạng. Ở đây thật tế là hai máy ngang nhau, tương tác peer-to-peer và sử lý trên Access chứ không phải là Oracle. Khi sử lý trên Oracle thì mọi hoạt động diễn ra trên database và chỉ trả về kết quả nhưng với Access phải mang tất cả dữ liệu vào tính toán rồi mơi trả kết quả. Đây là mạng nội bộ đơn của phòng mạch và nhiệm vụ của máy ngoài dành cho nhân viên với nhiệm vụ thu nhận cũng như bảo đảm mọi thao tác và dữ liệu của bệnh nhân. Máy trong là của bác sĩ chỉ có nhiệm vụ mở lên để xem hồ sơ và ghi nhận bệnh trạng mới. Trên thực tế cả hai máy ở đây đều là clients nên database ở nơi nào cũng như nhau và sự tương tác trực tiếp giữa services với database càng ngắn càng tốt. Tất nhiên mọi người có một cách tiếp cận vấn đề khác nhau nhưng khi hai máy đồng dạng mà dồn mọi tính năng về một máy và nhất là để bác sĩ phải đợi lâu hơn tiếp tân thì chắc ông ta sẽ giận đó.

Tùy theo cơ sở hạ tầng và hoàn cảnh thực tế mà các mô hình ứng dụng chuyển đổi khác nhau. Tôi vẫn thường nghe các bạn ở VN nói nhiều về bảo mật và luôn cho rằng chúng ta chưa quan tâm đúng mức về bảo mật. Ngay như ở đây chúng ta nói về database và bảo mật, thật ra chúng ta đang nói về những table đơn giản không cần đến DBA mà chỉ cần người sử dụng cũng là người trực tiếp quản lý. Bảo mật là một vấn đề rất tốn kém, và phiền phức và luôn có mặt ở mọi nơi. Ngay cả khi bạn không áp dụng một biện pháp bảo mật nào nó cũng được đánh giá bảo mật level "D" hay "E0". Một lý thuyết mà các chuyên gia bảo mật không thích nghe là khi không ai biết đến ta thì ta an tòan. Có nghĩa là nếu văn phòng bác sĩ hạn chế tương tác với bên ngoài thì nó sẽ an toàn trên cả mức bỏ tiền cho các biện pháp an toàn. Chính vì lẽ đó mà policy lại còn quan trọng hơn mọi biện pháp bảo mật. Ngay cả khi tương tác với bên ngoài và có "chăm sóc" về vấn đề bảo mật thì vấn đề recorvery vẫn phải được thực hiện. Trong trường hợp này thì chỉ cần lưu trữ database bằng một external hardware vừa rẻ vừa tốt hơn là phải lo về vấn đề bảo mật.

Mô hình là chết con người là sống và mỗi người lại tiếp cận vấn đề một cách khác nhau. Tuy nhiên những lý thuyết mà bạn ITbaby hoàn toàn cần thiết cho sự phát triển lâu dài.
===============

bdkhoi296
01-02-2004, 12:52
Kính chào anh 7604, Itbaby và các bạn,
Trước tiên em chân thành cảm ơn sự giúp đỡ nhiệt tình của 2 anh. Em chỉ mới bước vào thế giới Access,quả thật như vậy, chỉ biết làm mấy cái query đơn giản như select, crosstab… Em đang công tác ở bệnh viện Tai Mũi Họng TPHCM, một bệnh viện hiện nay đang quản lý số liệu thống kê bằng tay, mọi thứ đều làm bằng tay va calculator. Em muốn chuyển đổi mọi thứ sang database để dễ dàng truy xuất và quản lý trong thời gian lâu dài, vì thế nên em học Access. Selfteach vài cuốn sách về cơ sở dữ liệu Access, trong khi mọi thứ còn mơ hồ và nhiều khái niệm còn chưa hiểu một cách rõ ràng, thì nhu cầu về công việc ấy càng thôi thúc khiến em “mạnh dạn” làm thử một database như vậy. Vâng, đó chỉ là ý tưởng, mọi thứ còn là ý tưởng và các anh bàn luận đối với em cũng là “siêu tưởng”. Vì vậy em xin phép được gác project đó qua một bên để chuyển hóa các số liệu thống kê thành database trước. Trong quá trình chuyển hóa thành database các số liệu thống kê em cũng kính xin các anh giúp đỡ.
Em gửi lên database tên là Báo cáo tổng hợp (BCTH) mà thời gian thực hiện dự án đang rất cấp bách. Với database như vậy, em cần xuất gấp ra 2 report có nội dung như sau:
- Report thứ nhất : Thống kê về hoạt động điều trị trong một thời gian xác định (kỳ) do user nhập vào, gồm có các thông tin sau đây:
+ Số người bệnh đầu kỳ=số người bệnh còn lại của cuối kỳ trước đang điều trị kéo dài đến kỳ sau. Ví dụ kỳ từ 20-1-04 đến 25-1-04 còn 15 người vẫn đang điều trị chưa xuất viện đến ngày 25-1-04(dựa vào ngày xuất viện trong tblHosobenhan) thì thông tin “số người bệnh đầu kỳ” là 15.
+ Tổng số người bệnh vào điều trị trong kỳ: là số người nhập viện trong kỳ (dựa vào “Ngày nhập viện” trong tblHosobenhan). Nghĩa là khi user nhập vào thời điểm từ ngày 20-1-04 đến 25-1-04 thì sẽ xuất ra được số người nhập viện trong khoảng thời gian trên dựa vào “ngày nhập viện”)
+ “Tổng số người bệnh vào điều trị trong kỳ với tuổi < 15: giống như trên nhưng có ràng buộc số tuổi.
+ “Tổng số người bệnh vào điều trị trong kỳ mà cấp cứu”: thêm điều kiện có cấp cứu. Ví dụ trong khoảng thời gian trên có 5 người vào điều trị nhưng chỉ có 3 là cấp cứu (dựa vào field “cấp cứu”, nếu có “check” thì có cấp cứu) thì xuất ra được 3.
+ “Tổng số ngày điều trị nội trú trong kỳ” : = [Ngày xuất viện]-[Ngày nhập viện] trong kỳ. Khi user nhập vào kỳ thì xuất ra được tổng số ngày trong kỳ đó với ràng buộc : [ngày xuất viện] trong kỳ (ví dụ từ 20-1-04 đến 25-1-04), [ngày nhập viện] cũng trong kỳ (ví dụ từ 20-1-04 đến 25-1-04).
+ “Tổng số người bệnh có thẻ BHYT trong kỳ: dựa vào [BHYT] trong tblHosobenhan, nếu có dấu “check” thì có BHYT).
+ “Tổng số người bệnh còn lại cuối kỳ”= số người bệnh đầu kỳ sau: dựa vào ngày xuất viện nếu sau kỳ mà vẫn còn chưa xuất viện thì xuất ra tổng số người chưa xuất viện.
Đó các cột tổng số có nam lẫn nữ, và cũng với số vùng như vậy, chỉ tính riêng nữ thôi. Có thể phác thảo report như sau (xin xem report1.jpg)
- Report thứ 2 : Tình hình bệnh tật trong kỳ, gồm có các thông tin như sau (xin xem report2.jpg)

Mong các bạn và các anh chị hết lòng giúp đỡ. Em xin chân thành cảm ơn.

bdkhoi296
01-02-2004, 13:13
Hình ảnh của report 1 và report 2 :

bdkhoi296
01-02-2004, 13:16
Report 1 và report 2 :

7604
01-02-2004, 22:31
Chào mọi người nghe, hôm nay chủ nhật lên chơi chút thôi. bđkhoi296, bắt đầu công việc như vậy là tốt lắm rồi vì ý nhất là có hướng đi và cũng là một hướng đi đúng. Làm việc với database thì rất đa dạng nhưng tất cả chỉ bao gồm có 2 chử đó là "thông tin". Làm sao để lưu trữ và chuyển đổi thông tin một cách nhanh chóng và tiện lợi khi cần thiết, cho nơi cần thiết chính là tiêu điểm của IT. Muốn chuyển đổi thông tin trước hết phải thu lượm thông tin và lưu trữ theo một mô hình thích hợp để có thể trao đổi ngay lập tức và phát triển khi cần thiết. Công việc này đòi hỏi tỉ mỉ và kiên nhẫn, thường được gọi là ground-work hay là architecture lay-out. Đối với dân IT thì việc chuyển đổi thông tin đơn giản nhưng architecture lay-out lại thường gặp khó khăn vì nó xuất phát từ bên trong từng công việc. Để tạo ra report theo ý của em thì có nhiều software khác nhau và nhiều cách khác nhau nhưng database hay dữ liệu chỉ có 1 nguồn không đổi. Nói một cách khác thông tin chuyển ra thì đa dạng nhưng dữ liệu phải cố định và chính xác. Nếu em khá về các dạng phần mềm cơ sở dữ liệu thì việc tạo ra "view" cũng như tương tác qua mạng không gì khó khăn. Nếu em chỉ mới bắt đầu thì nên bắt đầu từ "excel". Đây là một cái "view" căn bản nhất và cho phép tương tác với mọi phần mềm một cách đơn giản nhất đồng thời cũng là căn bản của mọi flat-table và mọi người cũng dể sử dụng. Create view trên excel sao cho phù hợp với công việc bằng cách sử dụng những công cụ có sẳn của excel. Khi đã hiểu những gì cần phải "có" thì việc chuyển đổi sang Access hay các dạng database khác cũng chỉ là chuyển đổi tầng trên cùng của OSI.
====================

poor_boss35
04-02-2004, 17:56
Chào bdkhoi296!
Không thấy bác trả lời em gì cả