線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1674
推到 Plurk!
推到 Facebook!

delphi的核取方塊轉文字型態顯示

答題得分者是:st33chen
denise0411
一般會員


發表:4
回覆:4
積分:1
註冊:2008-10-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-24 13:31:41 IP:140.128.xxx.xxx 訂閱

各位大大好:
我在寫一個診所排班表的程式
遇到一些問題
想請教大大們
該怎麼解決?

因為診所的營運時段分為三個早、午、晚診
例如:我們去診所看病時可以在櫃台看到
個人的醫師名片
它是專門供病患拿取
此名片是紀錄醫生的看診時段
以表格來顯示
如果星期一早上有看診
則在此方格中口用打勾方式顯示
這個程式我們已經寫出來了

不過希望可以再把整家診所的醫師
匯整在同一個表格內
例如:星期一早診看診的醫師有『黃小華、王小明、林大同』三人
我們想要將個人醫師的班表(此以打禸方式顯示)
轉成全診所的醫師班表(此以醫師姓名顯示)
然後可以在星期一早診的同一個方格內
就顯示此三個醫師的姓名

不知這樣的描述是否清楚
以上麻煩大大了
謝謝

st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-24 17:29:57 IP:122.116.xxx.xxx 未訂閱
您可能要說明一下資料檔 的 table structure 會比較清楚哦.
也就是 每個醫生的看診時段 的資料您如何存到 database 中的
這應該會影響解決問題的方法

===================引 用 denise0411 文 章===================

因為診所的營運時段分為三個早、午、晚診
例如:我們去診所看病時可以在櫃台看到
個人的醫師名片
它是專門供病患拿取
此名片是紀錄醫生的看診時段
以表格來顯示
如果星期一早上有看診
則在此方格中口用打勾方式顯示
這個程式我們已經寫出來了

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
denise0411
一般會員


發表:4
回覆:4
積分:1
註冊:2008-10-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-28 13:45:34 IP:140.128.xxx.xxx 訂閱

您好:
不知道你說的table structure
是不是如下的資料表欄位和型態
我們把醫生的看診時段用以下的欄位存入
table包含:
員工編號e_no
診編號class_no
班表起始日c_start
日期c_time
醫師看診時段
c11:星期一早診
c12:星期一午診
c13:星期一晚診
c21:星期二早診
c22:星期二午診
c23:星期二晚診
.
.
c73:星期日晚診
共21個欄位來儲放星期一到日的每三診時段

現在我們想要用它來
轉成綜合各醫師的班表
但是顯示方式為名字
不知道這樣的方式
能不能行得通?

再次麻煩您了
謝謝大大!





===================引 用 st33chen 文 章===================

您可能要說明一下資料檔 的 table structure 會比較清楚哦.
也就是 每個醫生的看診時段 的資料您如何存到 database 中的
這應該會影響解決問題的方法

===================引 用 denise0411 文 章===================

因為診所的營運時段分為三個早、午、晚診
例如:我們去診所看病時可以在櫃台看到
個人的醫師名片
它是專門供病患拿取
此名片是紀錄醫生的看診時段
以表格來顯示
如果星期一早上有看診
則在此方格中口用打勾方式顯示
這個程式我們已經寫出來了

st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-28 17:28:08 IP:122.116.xxx.xxx 未訂閱
您好,
沒有人回答的話, 我來試試看,
我想這問題會有很多種解法, 包括從源頭的 table structure 設計開始都是可以討論的.
現在, 就以您現有的檔案結構來解看看.

var mylist : tstringlist;
astr, str1, str2, str3, str4, str5, str6, str7 : string;

記得
form1.onshow 時加 mylist := tstringlist.create;
form1.onclose 時加 mylist.free;

然後 :

tmpsql.sql.text :=
'select * from'
'('
'select eno, ''1'' session, c11 wkd1, c21 wkd2, c31 wkd3, c41 wkd4, c51 wkd5, c61 wkd6, c71 wkd7'
'union all'
'select eno, ''2'', c12, c22, c32, c42, c52, c62, c72'
'union all'
'select eno, ''3'', c13, c23, c33, c43, c53, c63, c73'
')'
'where trim(wkd1 || wkd2 || wkd3 || wkd4 || wkd5 || wkd6 || wkd7) <>'''' '
'order by session, eno';
cur_session :='x';
tmpsql.open;
while not tmpsql.eof do begin
if cur_session<>tmpsql.fieldbyname('session').value then begin
astr := trim(str1 str2 str3 str4 str5 str6 str7);
str1 := ''; str2 :=''; str3 :=''; str4 :=''; str5 :=''; str6:=''; str7:='';
if astr<>'' then mylist.add(astr);
cur_session := tmpsql.fieldbyname('session').value;
end;
eno := tmpsql.fieldbyname('eno').value;
if tmpsql.fieldbyname('wkd1').value='x' then str1:= str1 ' ' eno; // 假設在資料庫中, c11, c12, ... 是存 x 或 空格.
if tmpsql.fieldbyname('wkd2').value='x' then str2:= str2 ' ' eno;
if tmpsql.fieldbyname('wkd3').value='x' then str3:= str3 ' ' eno;
if tmpsql.fieldbyname('wkd4').value='x' then str4:= str4 ' ' eno;
if tmpsql.fieldbyname('wkd5').value='x' then str5:= str5 ' ' eno;
if tmpsql.fieldbyname('wkd6').value='x' then str6:= str6 ' ' eno;
if tmpsql.fieldbyname('wkd7').value='x' then str7:= str7 ' ' eno;
tmpsql.next;
end;
astr := trim(str1 str2 str3 str4 str5 str6 str7);
if astr<>'' then mylist.add(astr);
tmpsql.close;
mylist.savetofile('brabrabra.csv');

再用 excel 打開 csv 檔.
另外, 例中是用 eno, 請自行串個檔改成 doctor's name.

參考一下.

天祐我國, 股市, 經濟早日好轉.

===================引 用 denise0411 文 章===================

您好:
不知道你說的table structure
是不是如下的資料表欄位和型態
我們把醫生的看診時段用以下的欄位存入
table包含:
員工編號e_no
診編號class_no
班表起始日c_start
日期c_time
醫師看診時段
c11:星期一早診
c12:星期一午診
c13:星期一晚診
c21:星期二早診
c22:星期二午診
c23:星期二晚診
.
.
c73:星期日晚診
共21個欄位來儲放星期一到日的每三診時段

現在我們想要用它來
轉成綜合各醫師的班表
但是顯示方式為名字
不知道這樣的方式
能不能行得通?

再次麻煩您了
謝謝大大!





===================引 用 st33chen 文 章===================

您可能要說明一下資料檔 的 table structure 會比較清楚哦.
也就是 每個醫生的看診時段 的資料您如何存到 database 中的
這應該會影響解決問題的方法

===================引 用 denise0411 文 章===================

因為診所的營運時段分為三個早、午、晚診
例如:我們去診所看病時可以在櫃台看到
個人的醫師名片
它是專門供病患拿取
此名片是紀錄醫生的看診時段
以表格來顯示
如果星期一早上有看診
則在此方格中口用打勾方式顯示
這個程式我們已經寫出來了

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-10-28 17:31:52, 註解 無‧
st33chen 重新編輯於 2008-10-28 17:34:31, 註解 無‧
denise0411
一般會員


發表:4
回覆:4
積分:1
註冊:2008-10-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-30 19:12:02 IP:140.128.xxx.xxx 訂閱
不好意思
我們是將班表寫在tabsheet上
那宣告是要寫在tabsheet上嗎?
或者是沒有差別呢?

tmpsql.sql.text :=
'select * from'
'('
'select eno, ''1'' session, c11 wkd1, c21 wkd2, c31 wkd3, c41 wkd4, c51 wkd5, c61 wkd6, c71 wkd7'
'union all'
'select eno, ''2'', c12, c22, c32, c42, c52, c62, c72'
'union all'
'select eno, ''3'', c13, c23, c33, c43, c53, c63, c73'
')'
'where trim(wkd1 || wkd2 || wkd3 || wkd4 || wkd5 || wkd6 || wkd7) <>'''' '
'order by session, eno';

cur_session :='x';
tmpsql.open;
while not tmpsql.eof do begin
if cur_session<>tmpsql.fieldbyname('session').value then begin
astr := trim(str1 str2 str3 str4 str5 str6 str7);
str1 := ''; str2 :=''; str3 :=''; str4 :=''; str5 :=''; str6:=''; str7:='';
if astr<>'' then mylist.add(astr);
cur_session := tmpsql.fieldbyname('session').value;
end;
eno := tmpsql.fieldbyname('eno').value;
if tmpsql.fieldbyname('wkd1').value='x' then str1:= str1 ' ' eno; // 假設在資料庫中, c11, c12, ... 是存 x 或 空格.
if tmpsql.fieldbyname('wkd2').value='x' then str2:= str2 ' ' eno;
if tmpsql.fieldbyname('wkd3').value='x' then str3:= str3 ' ' eno;
if tmpsql.fieldbyname('wkd4').value='x' then str4:= str4 ' ' eno;
if tmpsql.fieldbyname('wkd5').value='x' then str5:= str5 ' ' eno;
if tmpsql.fieldbyname('wkd6').value='x' then str6:= str6 ' ' eno;
if tmpsql.fieldbyname('wkd7').value='x' then str7:= str7 ' ' eno;
tmpsql.next;
end;
astr := trim(str1 str2 str3 str4 str5 str6 str7);
if astr<>'' then mylist.add(astr);
tmpsql.close;
mylist.savetofile('brabrabra.csv');

以上這段可否請問是寫在哪個地方呢?

新手請教 非常感謝你>"<


===================引 用 st33chen 文 章===================
您好,
沒有人回答的話, 我來試試看,
我想這問題會有很多種解法, 包括從源頭的 table structure 設計開始都是可以討論的.
現在, 就以您現有的檔案結構來解看看.

var mylist : tstringlist;
astr, str1, str2, str3, str4, str5, str6, str7 : string;

記得
form1.onshow 時加 mylist := tstringlist.create;
form1.onclose 時加 mylist.free;

然後 :

tmpsql.sql.text :=
'select * from'
'('
'select eno, ''1'' session, c11 wkd1, c21 wkd2, c31 wkd3, c41 wkd4, c51 wkd5, c61 wkd6, c71 wkd7'
'union all'
'select eno, ''2'', c12, c22, c32, c42, c52, c62, c72'
'union all'
'select eno, ''3'', c13, c23, c33, c43, c53, c63, c73'
')'
'where trim(wkd1 || wkd2 || wkd3 || wkd4 || wkd5 || wkd6 || wkd7) <>'''' '
'order by session, eno';
cur_session :='x';
tmpsql.open;
while not tmpsql.eof do begin
if cur_session<>tmpsql.fieldbyname('session').value then begin
astr := trim(str1 str2 str3 str4 str5 str6 str7);
str1 := ''; str2 :=''; str3 :=''; str4 :=''; str5 :=''; str6:=''; str7:='';
if astr<>'' then mylist.add(astr);
cur_session := tmpsql.fieldbyname('session').value;
end;
eno := tmpsql.fieldbyname('eno').value;
if tmpsql.fieldbyname('wkd1').value='x' then str1:= str1 ' ' eno; // 假設在資料庫中, c11, c12, ... 是存 x 或 空格.
if tmpsql.fieldbyname('wkd2').value='x' then str2:= str2 ' ' eno;
if tmpsql.fieldbyname('wkd3').value='x' then str3:= str3 ' ' eno;
if tmpsql.fieldbyname('wkd4').value='x' then str4:= str4 ' ' eno;
if tmpsql.fieldbyname('wkd5').value='x' then str5:= str5 ' ' eno;
if tmpsql.fieldbyname('wkd6').value='x' then str6:= str6 ' ' eno;
if tmpsql.fieldbyname('wkd7').value='x' then str7:= str7 ' ' eno;
tmpsql.next;
end;
astr := trim(str1 str2 str3 str4 str5 str6 str7);
if astr<>'' then mylist.add(astr);
tmpsql.close;
mylist.savetofile('brabrabra.csv');

再用 excel 打開 csv 檔.
另外, 例中是用 eno, 請自行串個檔改成 doctor's name.

參考一下.

天祐我國, 股市, 經濟早日好轉.

===================引 用 denise0411 文 章===================

您好:
不知道你說的table structure
是不是如下的資料表欄位和型態
我們把醫生的看診時段用以下的欄位存入
table包含:
員工編號e_no
診編號class_no
班表起始日c_start
日期c_time
醫師看診時段
c11:星期一早診
c12:星期一午診
c13:星期一晚診
c21:星期二早診
c22:星期二午診
c23:星期二晚診
.
.
c73:星期日晚診
共21個欄位來儲放星期一到日的每三診時段

現在我們想要用它來
轉成綜合各醫師的班表
但是顯示方式為名字
不知道這樣的方式
能不能行得通?

再次麻煩您了
謝謝大大!





===================引 用 st33chen 文 章===================

您可能要說明一下資料檔 的 table structure 會比較清楚哦.
也就是 每個醫生的看診時段 的資料您如何存到 database 中的
這應該會影響解決問題的方法

===================引 用 denise0411 文 章===================

因為診所的營運時段分為三個早、午、晚診
例如:我們去診所看病時可以在櫃台看到
個人的醫師名片
它是專門供病患拿取
此名片是紀錄醫生的看診時段
以表格來顯示
如果星期一早上有看診
則在此方格中口用打勾方式顯示
這個程式我們已經寫出來了

st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-10-30 21:15:10 IP:122.116.xxx.xxx 未訂閱
您好,

1. mylist 宣告成全域變數.
在主 form 的 onshow, onclose 寫
2. tmpsql.sql.text :=
我猜您應該有一按鈕說要印表或查詢, 就寫在那裡吧,
照理, 應該是由您來決定什麼時機要產生那個表才對.

參考一下


------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
denise0411
一般會員


發表:4
回覆:4
積分:1
註冊:2008-10-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-11-07 13:14:32 IP:140.128.xxx.xxx 訂閱
大大您好:
不好意思
又得再次麻煩你了

我們非常想作出這個功能
但因我們對delphi不是真的在行
所以在你給我們這些程式碼後
試過N次還是不行
所以可以冒味問你一下
能把以上這個程式
直接寄到我們的信箱嗎?

如果可以的話
lgi_7411@hotmail.com
是我的信箱

謝謝你^^


===================引 用 st33chen 文 章===================
您好,

1. mylist 宣告成全域變數.
在主 form 的 onshow, onclose 寫
2. tmpsql.sql.text :=
我猜您應該有一按鈕說要印表或查詢, 就寫在那裡吧,
照理, 應該是由您來決定什麼時機要產生那個表才對.

參考一下


st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-11-08 00:56:14 IP:122.116.xxx.xxx 未訂閱
您好,
我剛剛用 mysql 試了一下, 好像可以了,
(對不起, 原回覆的程式段只是表達邏輯, 要執行的話確實粗糙)
我設了兩個 table :
1. class存排班明細, 格式如您所說的,但class_no,c_start, c_time不知用途,沒有用到;
2. doctor存e_no, e_name用來轉名字
==================================================
procedure TForm1.Button1Click(Sender: TObject);
var eno, cur_session, astr, str1, str2, str3, str4, str5, str6, str7 : string;
mylist : tstringlist;
begin
mylist := tstringlist.create;
mylist.Clear;
mylist.Add('診別,星期一,星期二,星期三,星期四,星期五,星期六,星期七^_^');
tmpsql.sql.text :=
'select a.*, b.e_name'
' from ('
' select e_no, ''1.早診'' session, c11 wkd1, c21 wkd2, c31 wkd3, c41 wkd4, c51 wkd5, c61 wkd6, c71 wkd7 from class'
' union all '
' select e_no, ''2.午診'', c12, c22, c32, c42, c52, c62, c72 from class'
' union all '
' select e_no, ''3.晚診'', c13, c23, c33, c43, c53, c63, c73 from class'
' ) a, doctor b'
' where trim(concat(wkd1,wkd2,wkd3,wkd4,wkd5,wkd6,wkd7)) <>'''' '
' and a.e_no=b.e_no'
' order by session, e_no';
cur_session :='x';
eno := '';
str1 := ''; str2 :=''; str3 :=''; str4 :=''; str5 :=''; str6:=''; str7:='';
tmpsql.open;
while not tmpsql.eof do begin
if cur_session<>tmpsql.fieldbyname('session').value then begin
astr := trim(str1 ',' str2 ',' str3 ',' str4 ',' str5 ',' str6 ',' str7);
str1 := ''; str2 :=''; str3 :=''; str4 :=''; str5 :=''; str6:=''; str7:='';
if astr<>',,,,,,' then mylist.add(cur_session ',' astr);
cur_session := tmpsql.fieldbyname('session').value;
end;
eno := tmpsql.fieldbyname('e_name').value;
if tmpsql.fieldbyname('wkd1').value='x' then str1:= str1 ' ' eno; // 假設在資料庫中, c11, c12, ... 是存 x 或 空格.
if tmpsql.fieldbyname('wkd2').value='x' then str2:= str2 ' ' eno;
if tmpsql.fieldbyname('wkd3').value='x' then str3:= str3 ' ' eno;
if tmpsql.fieldbyname('wkd4').value='x' then str4:= str4 ' ' eno;
if tmpsql.fieldbyname('wkd5').value='x' then str5:= str5 ' ' eno;
if tmpsql.fieldbyname('wkd6').value='x' then str6:= str6 ' ' eno;
if tmpsql.fieldbyname('wkd7').value='x' then str7:= str7 ' ' eno;
tmpsql.next;
end;
astr := trim(str1 ',' str2 ',' str3 ',' str4 ',' str5 ',' str6 ',' str7);
if astr<>',,,,,,' then mylist.add(cur_session ',' astr);
tmpsql.close;
mylist.savetofile('c:\test\service_list.csv');
mylist.free;
showmessage('service list is saved as c:\test\service_list.csv, please open it in excel');
end;
因為我不知道您要如何處理結果, 所以還是存成 csv 檔, 用 excel 可以打開
再參考一下.
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-11-08 01:12:08, 註解 無‧
st33chen 重新編輯於 2008-11-08 01:15:48, 註解 無‧
st33chen 重新編輯於 2008-11-08 01:25:15, 註解 無‧
系統時間:2024-05-06 17:34:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!