資料庫欄位問題 |
尚未結案
|
jch
中階會員 ![]() ![]() ![]() 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
1.欄位型態(看你使用的資料庫為何) Paradox: Memo 型態 MSSQL : Text 型態 MySql : Text、mediumtext、longtext 其他 : 我不清楚(你可找類似的) 2.就把當做一般文字欄位處理即可 欄位存到TMemo: Memo1.Text := DataSet.FieldByName('Memo').AsString; TMemo存到欄位: DataSet.FieldByName('Memo').AsString:= Memo1.Text; 3.報表標題好像不需要用到Memo欄位型態,只要一般文字型態就可以了吧 |
jch
中階會員 ![]() ![]() ![]() 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
|
terrychen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|
jch
中階會員 ![]() ![]() ![]() 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: 小弟的問題是存入資料時該如何保存使用者設定的字型樣式等... ======================== 我是DELPHI的初學者同樣可以使用Memo型態的欄位,以下方式保存字形樣式等資料到欄位 DataSet.FieldByName('Memo').AsString:= RichEdit1.Lines.Text; 因為 RichEdit1.Lines.Text; 已經內含文字樣式變化之資訊(也訧RTF的文字格式),你也可以RichEdit1.Lines.SaveToFile('FileName.rtf'); 它會存成FileName.rtf檔,而你可以用WordPad直接打開來編輯。 發表人 - chance36 於 2004/02/07 18:14:42 |
jch
中階會員 ![]() ![]() ![]() 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: 多謝大哥,但是小弟用 DataSet.FieldByName('Memo').AsString:= RichEdit1.Lines.Text; 的方式將資料寫會資料庫後,再讀出來依然沒有改變??或是RichEdit物件該做初始化嗎??問題不在[再讀出來依然沒有改變],而是在存入前你沒去改變它 你應該針對RicjEdit.Lines 的內容做處理(改變字形、大小、顏色....) 而不是對RichEdit做處理,對RichEdit做處理只是RichEdit在螢幕上的表現,不是其文字內容的變化 |
jch
中階會員 ![]() ![]() ![]() 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
小弟在回存前已經將畫面上的RichEdit內容做了修正,而將檔案存在C:\時用WORD開啟該檔是正確的!!以下是小弟的程式!
q1.sql.Clear;
q1.sql.add('UPDATE RPT_TYPE');
q1.sql.add('SET TEXT=:TEXT');
q1.sql.add('WHERE KIND=:KIND');
q1.ParamByName('TEXT').AsString:=RichEdit1.Lines.Text;
q1.ParamByName('KIND').AsString:='HEAD_C';
q1.ExecSQL; 而TEXT於SQL中小弟是使用TEXT的資料型態(不知道適合嗎??) 麻煩大哥幫幫忙,指教一下!! ========================
我是DELPHI的初學者
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: 小弟在回存前已經將畫面上的RichEdit內容做了修正,而將檔案存在C:\時用WORD開啟該檔是正確的!!以下是小弟的程式! q1.sql.Clear; q1.sql.add('UPDATE RPT_TYPE'); q1.sql.add('SET TEXT=:TEXT'); q1.sql.add('WHERE KIND=:KIND'); q1.ParamByName('TEXT').AsString:=RichEdit1.Lines.Text; q1.ParamByName('KIND').AsString:='HEAD_C'; q1.ExecSQL; 而TEXT於SQL中小弟是使用TEXT的資料型態(不知道適合嗎??) 麻煩大哥幫幫忙,指教一下!! ======================== 我是DELPHI的初學者剛才實作一下,更正錯誤(我的認知錯誤)如下 q1.sql.Clear; q1.sql.add('UPDATE RPT_TYPE'); q1.sql.add('SET TEXT=:TEXT'); q1.sql.add('WHERE KIND=:KIND'); q1.ParamByName('TEXT').AsString:=RichEdit1.Text; // 改成這樣 q1.ParamByName('KIND').AsString:='HEAD_C'; q1.ExecSQL; 發表人 - chance36 於 2004/02/07 20:58:48 |
jch
中階會員 ![]() ![]() ![]() 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
|
jch
中階會員 ![]() ![]() ![]() 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
procedure TForm1.Button1Click(Sender: TObject);
begin
q1.close;
q1.sql.Clear;
q1.sql.add('UPDATE RPT_TYPE');
q1.sql.add('SET TEXT=:TEXT');
q1.sql.add('WHERE KIND=:KIND'); PDJRichEdit1.Lines.SaveToFile('c:\x.rtf');
q1.ParamByName('TEXT').AsString:=PDJRichEdit1.Text;
PDJRichEdit1.Text := q1.FieldByName('TEXT').AsString; //出現錯誤 q1.ParamByName('KIND').AsString:='HEAD_C';
q1.ExecSQL; end; ========================
我是DELPHI的初學者
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
procedure TForm1.Button1Click(Sender: TObject);
begin
q1.close;
q1.sql.Clear;
q1.sql.add('UPDATE RPT_TYPE');
q1.sql.add('SET TEXT=:TEXT');
q1.sql.add('WHERE KIND=:KIND');
q1.ParamByName('TEXT').AsString:=PDJRichEdit1.Text;
q1.ParamByName('KIND').AsString:='HEAD_C';
q1.ExecSQL;
// 以上為更新資料的程式段 q1.close;
q1.sql.Clear;
q1.sql.add('SELECT * RPT_TYPE');
q1.sql.add('WHERE KIND=:KIND');
q1.ParamByName('KIND').AsString:='HEAD_C';
q1.Open;
PDJRichEdit1.Text := q1.FieldByName('TEXT').AsString; //
// 這裏為取出資料的程式段 end; 發表人 - chance36 於 2004/02/07 21:46:11
|
jch
中階會員 ![]() ![]() ![]() 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
q1.close;
q1.sql.Clear;
q1.sql.add('SELECT * FROM RPT_TYPE');
q1.sql.add('WHERE KIND=:TYPE');
q1.ParamByName('TYPE').AsString:='HEAD_C';
q1.Open;
PDJRichEdit1.Text := q1.FieldByName('TEXT').AsString;
多謝大哥,將資料寫入馬上在讀出來果然樣式都還存在,但是將程式結束再進入一切又恢復了!!WHY?? ========================
我是DELPHI的初學者
|
terrychen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: 將資料寫入馬上在讀出來果然樣式都還存在,但是將程式結束再進入一切又恢復了!!WHY??之前的程式範範例,僅是與你說明,RichEdit的內容如何更新回資料庫,及資料欄位的內容如何取回到RichEdit中,並不是要你如貼出的程式段般,更新完後馬上又取出來,而是你該依據自已的系統架構、程式流程、操作流程等需求,在需要更新資料庫的地方,參考範例來更新資料,在需要讀取資料旳地方,同樣的參考範例來讀出資料內容(請注意唷!是[參考]不是[照抄])。 最後這個問題好像有點模糊(之前的問題其實也是滿模糊的,只是剛好碰對了),或說問題很籠統,為何資料寫入後讀出來沒問題,而程式結束再執行又不行了呢?原因很多,可不可以說明一下,你用的是那些元件,屬性為何及其關聯性 , 如果程式不長,最好完整貼出,讓大家看看,到底問題出在那裏?這個我真的無法猜測了(問題很簡單,但範圍很廣)。 |
hahalin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
jch
中階會員 ![]() ![]() ![]() 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
unit head_edit; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, PDJ_Basic, ComCtrls, Db, DBTables, ToolWin, XPMenu, Buttons,
ImgList, PDJ_XPSpBt, PDJ_SB, PDJ_SeB, PDJ_DBMeRe; type
TForm1 = class(TForm)
ToolBar1: TToolBar;
Database1: TDatabase;
q1: TQuery;
ds1: TDataSource;
PDJRichEdit1: TPDJRichEdit;
PDJComboBox1: TPDJComboBox;
XPMenu1: TXPMenu;
PDJComboBox2: TPDJComboBox;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
PDJSpeedButton1: TPDJSpeedButton;
PDJSpeedButton2: TPDJSpeedButton;
PDJSpeedButton4: TPDJSpeedButton;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure PDJComboBox1Change(Sender: TObject);
procedure PDJComboBox2Change(Sender: TObject);
procedure PDJSpeedButton4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure PDJSpeedButton1Click(Sender: TObject);
procedure PDJSpeedButton2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject);
begin
//讀取系統字型
PDJComboBox1.items:=Screen.Fonts;
//讀取資料
q1.close;
q1.sql.Clear;
q1.sql.add('SELECT TEXT FROM RPT_TYPE');
q1.sql.add('WHERE KIND=:TYPE');
q1.ParamByName('TYPE').AsString:='HEAD_c';
q1.open;
PDJRichEdit1.Text:=q1.fieldbyname('TEXT').AsString;
end; procedure TForm1.PDJComboBox1Change(Sender: TObject);
begin
PDJRichEdit1.SelAttributes.Name:=PDJComboBox1.Text;
end; procedure TForm1.PDJComboBox2Change(Sender: TObject);
begin
PDJRichEdit1.SelAttributes.Size:=strtoint(PDJComboBox2.text);
end; //粗體
procedure TForm1.PDJSpeedButton4Click(Sender: TObject);
begin
With PDJRichEdit1.SelAttributes do
begin
if fsBold in Style then
Style := Style-[fsBold]
else
Style := Style [fsBold]
end;
end; procedure TForm1.Button1Click(Sender: TObject);
begin
q1.close;
q1.sql.Clear;
q1.sql.add('UPDATE RPT_TYPE');
q1.sql.add('SET TEXT=:TEXT');
q1.sql.add('WHERE KIND=:KIND'); PDJRichEdit1.Lines.SaveToFile('c:\x.rtf');
q1.ParamByName('TEXT').AsString:=PDJRichEdit1.Text;
q1.ParamByName('KIND').AsString:='HEAD_C';
q1.ExecSQL;
end; //斜體
procedure TForm1.PDJSpeedButton1Click(Sender: TObject);
begin
With PDJRichEdit1.SelAttributes do
begin
if fsItalic in Style then
Style := Style-[fsItalic]
else
Style := Style [fsItalic]
end; end; //底線
procedure TForm1.PDJSpeedButton2Click(Sender: TObject);
begin
With PDJRichEdit1.SelAttributes do
begin
if fsUnderline in Style then
Style := Style-[fsUnderline]
else
Style := Style [fsUnderline]
end;
end; end. 已上是小弟所有的程式碼,小弟要做的功能是讓使用者可以自行設定報表表頭的文字內容,字型,樣式,大小等,然後再將結果存入資料庫,使用者要編輯時再由資料庫讀出來編輯!!但是小弟以上的方式只能記錄文字,無法紀錄樣式?? ========================
我是DELPHI的初學者
|
hahalin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
jch
中階會員 ![]() ![]() ![]() 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
|
terrychen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
type TForm1 = class(TForm) . . . end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin //讀取系統字型 PDJComboBox1.items:=Screen.Fonts; //以下讀取資料建議放在 FormShow的位置 //讀取資料 q1.close; q1.sql.Clear; q1.sql.add('SELECT TEXT FROM RPT_TYPE'); q1.sql.add('WHERE KIND=:TYPE'); q1.ParamByName('TYPE').AsString:='HEAD_c'; q1.open; // 你確定只會選出一筆記錄? PDJRichEdit1.Text:=q1.fieldbyname('TEXT').AsString; end; . . . procedure TForm1.Button1Click(Sender: TObject); Var Q2:TQuery; begin // 改成用另一個Query來更新資料 q2:= TQuery.Creat(Self); Q2.DataBaseName := Q1.DataBaseName ; q2.sql.Clear; q2.sql.add('UPDATE RPT_TYPE'); q2.sql.add('SET TEXT=:TEXT'); q2.sql.add('WHERE KIND=:KIND'); q2.ParamByName('TEXT').AsString:=PDJRichEdit1.Text; q2.ParamByName('KIND').AsString:='HEAD_C'; q2.ExecSQL; q2.Free; // q1.Refresh; // 不保証所有資料庫皆支援 q1.Close; q1.Open; PDJRichEdit1.Text:=q1.fieldbyname('TEXT').AsString; end; { q1.close; q1.sql.Clear; q1.sql.add('UPDATE RPT_TYPE'); q1.sql.add('SET TEXT=:TEXT'); q1.sql.add('WHERE KIND=:KIND'); // 這一行好像沒用 PDJRichEdit1.Lines.SaveToFile('c:\x.rtf'); q1.ParamByName('TEXT').AsString:=PDJRichEdit1.Text; q1.ParamByName('KIND').AsString:='HEAD_C'; q1.ExecSQL; } end; ... ... ... end.發表人 - chance36 於 2004/02/08 16:53:49 |
jch
中階會員 ![]() ![]() ![]() 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
多謝Chance36 大哥非常熱心的指導,小弟照大哥的方式試了一下但是還是一樣,
不知道是否是資料庫中欄位類型的問題??
小弟想要是否要將RICHEDIT的內容先存入C:\x.rtf中,再將x.rtf存入資料庫中,但是小弟是一個初學者,並不會使用此種方式,所以請大哥幫幫忙吧!!
小弟也試過將RICHEDIT的內容存入MEMO中,再將MEMO的內容存入資料庫中,如此在讀出來時的確可以保留樣式,但是當自行改變後,按下存檔執行SQL時會出現錯誤!! ========================
我是DELPHI的初學者
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: 您好: 我想妳該學會在本站搜尋問題的能力,比您發問後獲得解答,來的有效率,您只要利用關鍵字如:savetostream or loadfromstream or ftBlob ....搜尋一下便有相關範例可供參考,這樣當對您較有幫助,以上建議參考參考,還是提供一ㄍ參考給您http://delphi.ktop.com.tw/topic.php?topic_id=24721 ~~應無所住而生其心~~ 發表人 - terrychen 於 2004/02/08 15:59:21terrychen 大大幫你找到一個範例 參考看看 |
jch
中階會員 ![]() ![]() ![]() 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
多謝兩位大哥的指導,大哥推薦的文章小弟已經有去看過了
procedure SetRTFTextFromBlobField( dsData: TDataSet; const sField: string; reEdit: TRichEdit );
var
oBS: TBlobStream;
begin
oBS := TBlobStream.Create(dsData.FieldByName(sField) as TBlobField, bmRead);
try
reEdit.Lines.LoadFromStream(oBS);
finally
oBS.Free;
end;
end;
procedure SaveRTFTextToBlobField( dsData: TDataSet; const sField: string; reEdit: TRichEdit );
var
oBS: TBlobStream;
begin
if not (dsData.State in [dsEdit, dsInsert]) then
dsData.Edit;
oBS := TBlobStream.Create(dsData.FieldByName(sField) as TBlobField, bmWrite);
try
reEdit.Lines.SaveToStream(oBS);
dsData.Post;
finally
oBS.Free;
end;
end; -- 範例中是使用TTable元件來供新資料庫,其實小弟已經有去看過了!小弟試著將dsData.FieldByName(sField)直接更改為q1.ParamByName('TEXT'),好像不能這樣改??所以才又回到原點來尋求各位大哥的援助!! ========================
我是DELPHI的初學者
|
hahalin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
terrychen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|
jch
中階會員 ![]() ![]() ![]() 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |