delphi的核取方塊轉文字型態顯示 |
答題得分者是:st33chen
|
denise0411
一般會員 ![]() ![]() 發表:4 回覆:4 積分:1 註冊:2008-10-11 發送簡訊給我 |
各位大大好:
|
st33chen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您可能要說明一下資料檔 的 table structure 會比較清楚哦. 也就是 每個醫生的看診時段 的資料您如何存到 database 中的 這應該會影響解決問題的方法 ===================引 用 denise0411 文 章=================== 因為診所的營運時段分為三個早、午、晚診
|
denise0411
一般會員 ![]() ![]() 發表:4 回覆:4 積分:1 註冊:2008-10-11 發送簡訊給我 |
您好: |
st33chen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好, 沒有人回答的話, 我來試試看, 我想這問題會有很多種解法, 包括從源頭的 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 文 章=================== 您好: |
denise0411
一般會員 ![]() ![]() 發表:4 回覆:4 積分:1 註冊:2008-10-11 發送簡訊給我 |
不好意思
我們是將班表寫在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 文 章=================== 您好: |
st33chen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
|
denise0411
一般會員 ![]() ![]() 發表:4 回覆:4 積分:1 註冊:2008-10-11 發送簡訊給我 |
大大您好:
不好意思 又得再次麻煩你了 我們非常想作出這個功能 但因我們對delphi不是真的在行 所以在你給我們這些程式碼後 試過N次還是不行 所以可以冒味問你一下 能把以上這個程式 直接寄到我們的信箱嗎? 如果可以的話 lgi_7411@hotmail.com 是我的信箱 謝謝你^^ ===================引 用 st33chen 文 章=================== 您好, 1. mylist 宣告成全域變數. 在主 form 的 onshow, onclose 寫 2. tmpsql.sql.text := 我猜您應該有一按鈕說要印表或查詢, 就寫在那裡吧, 照理, 應該是由您來決定什麼時機要產生那個表才對. 參考一下 |
st33chen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
我剛剛用 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 (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |