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

MySQl DATABASE複製的問題

缺席
tame_cat_tail
一般會員


發表:9
回覆:11
積分:4
註冊:2005-01-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-07-27 15:59:03 IP:61.223.xxx.xxx 未訂閱
請問誰能教我如何 用delphi寫一個程式,把Adatabase 完全複製到 另一個database 然後命名為 Bdatabase?
tame_cat_tail
一般會員


發表:9
回覆:11
積分:4
註冊:2005-01-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-07-27 16:00:02 IP:61.223.xxx.xxx 未訂閱
抱歉,忘了說,我是用MySQL4.0.22
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-07-27 16:44:36 IP:211.74.xxx.xxx 未訂閱


===================引 用 文 章===================
請問誰能教我如何 用delphi寫一個程式,把Adatabase 完全複製到 另一個database 然後命名為 Bdatabase?

將 Table 刪除,開立空白 Table ,資料複製

我是用很傳統的寫法,將 Linux 資料,搬到 windows 備份

程式較沒技巧,請笑納

[code]

Function TFMT_CopyAGREE( sJOB:string ):string;
var
sRTN : string;

nCC_From,nCC_To ,nERR_To: integer;
tempValue ,T21,T22: variant;
i: integer;
s , sfName: string;
v: variant;
sRecFields: string;

sText , sFieldSql , sDataSql : variant;

begin

sRTN := '';

// ----- 1.CREATE TABLE ------------------------------------------
if sJOB = '1CREATE' then
begin
// 資料檔名 : AGREE # 同意人資料
With ZQuery_Agree_To do
begin
Close;
SQL.Clear;
SQL.Add('CREATE TABLE `AGREE` ('); // Table Name

SQL.Add('`AG01` VARCHAR(20) NOT NULL ,');
SQL.Add('`AG02` VARCHAR(60) ,');

SQL.Add('`AG999` TEXT ,');

SQL.Add('PRIMARY KEY (`AG01`) )');

SQL.Add(' TYPE = MYISAM;');

ExecSQL;

SQL.Clear;
end;

sRTN := 'CREATE AGREE';

end; // sJOB= '1CREATE'

// ----- 2.DROP(DELETE) TABLE ------------------------------------------
if sJOB = '2DROP' then
begin
With ZQuery_AGREE_To do
begin
Close;
SQL.Clear;
SQL.Add('Drop TABLE `AGREE` ;'); // Table Name
ExecSQL;
SQL.Clear;

sRTN := 'DROP AGREE';

end;
end; // sJOB= '2DROP'

// ----- 3.COPY TABLE ------------------------------------------
nCC_From := 0;
nCC_To := 0;
edt_CountFrom.Text := '';
edt_CountTo.Text := '';

if sJOB = '3COPY' then
begin

With ZQuery_AGREE_To do
begin
Close;
SQL.Clear;
SQL.Add('Select * From AGREE ;');
ExecSQL;
Active := true;
end;

With ZQuery_AGREE_From do
begin
Close;
SQL.Clear;
SQL.Add('Select * From AGREE ;');
ExecSQL;

Active := true;
// -------------算一下,原始 來源檔有幾筆
While not Eof do //1
begin
nCC_From := nCC_From 1;
Next;
end; // 1 While not ZTable_Person_from.Eof do
edt_CountFrom.Text := inttostr( nCC_From );
First; // ZTable_xxxxx_From 回到第一筆
end; //With ZQuery_AGREE_From do

// Try
sFieldSql := '';
sDataSql := '';
application.ProcessMessages;
// ------------------// 準備 開始複製
With ZQuery_AGREE_From do
begin
While not Eof do //2
begin
nCC_To := nCC_To 1;
s := '';
sText := 'INSERT INTO AGREE ( ';
sFieldSql := '';
sDataSql := ' Values( ';

for i := 0 to FieldCount-1 do // ZQuery_xxxxx_From
begin
if not(Fields[i].FieldName = 'X000000') then
begin // 欄位 不是自動序號欄位=X00000,才進行複製

sfName := Fields[i].FieldName; // ZQuery_xxxx_From.
tempValue := FindField( sfName ).AsVariant;
// -----------------------------------------------
if VarIsNull( tempValue ) then
sDataSql := sDataSql #39 #39 // '""'
else //字串內容有單引號,必須成雙,避免 SQL 語法錯誤
sDataSql := sDataSql #39 Check_QuotedStr(tempValue) #39;
// -----------------------------------------------
if not (i=FieldCount-1) then // ZQuery_xxxxx_From.
begin
sFieldSql := sFieldSql sfName ',';
sDataSql := sDataSql ',';
end
else
sFieldSql := sFieldSql sfName ;

end; // nor 'X000000'...
end; // for i .............

sFieldSql := sFieldSql ' ) ';
sDataSql := sDataSql ' ); ';
sText := sText sFieldSql sDataSql ;
// ------------------------------------------------------
try
With ZQuery_AGREE_To do
begin
SQL.Clear;
SQL.Add( sText );
ExecSQL;
// 複製後,有些資料要更改
// FieldByName('XCSUM').AsString := '0';
// FieldByName('XCCDATE').AsString := DATETOSTR(NOW);
// Post;
end; // ZQuery_xxxxx_To

except
edit1.Text := sFieldSql;
edit2.Text := sDataSql;
nERR_To := nERR_To 1 ;
edt_CountTo_ERR.Text := inttostr( neRR_To );
application.ProcessMessages;
end;

Next; // ZQuery_xxxxx_From

if nCC_To > nCC_From - 10 then // 最後 15 筆,慢一點
begin
edt_CountTo.Text := inttostr( nCC_To );
application.ProcessMessages;
Sleep(300); // 慢一點,給 User 看見數字在跑
end;

end; // 2 While ZQuery_xxxxx_From.Eof do

end; // With ZQuery_xxxxx_From do

// Except
// showmessage('(0000-1061) 複製資料過程,發生嚴重存取錯誤 !!');
// end;

With ZQuery_AGREE_To do
begin
Active := false;
SQL.Clear;
end;

With ZQuery_AGREE_From do
begin
Active := false;
SQL.Clear;
end;

sRTN := 'COPY AGREE';

end; // sJOB= '3COPY'

Result := sRTN ;

end;

[/code]

------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
tame_cat_tail
一般會員


發表:9
回覆:11
積分:4
註冊:2005-01-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-07-27 19:40:34 IP:211.76.xxx.xxx 未訂閱

謝謝您的回應,不過我的問題不是TABLE ,而是整個DATABASE的複製,包括裡面的TABLE。

tame_cat_tail
一般會員


發表:9
回覆:11
積分:4
註冊:2005-01-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-07-28 02:02:36 IP:61.223.xxx.xxx 未訂閱
謝謝各位 我己經找到方法了,就是直接在delphi中呼叫mysqladmin去create bdatabase,然後再連上bdatabase,把adatabase裡的table 一個一個在bdatabase中create
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-07-28 10:57:50 IP:210.241.xxx.xxx 未訂閱

tame_cat_tail大哥:

大哥所言『直接在delphi中呼叫mysqladmin去create bdatabase』,是指用Code指揮mysqladmin作事嗎?如是,小弟對這很有興趣。如果可以的話,可否請大哥惠附一下相關程式碼。萬分感激。

------
Kevin
tame_cat_tail
一般會員


發表:9
回覆:11
積分:4
註冊:2005-01-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-07-28 20:00:23 IP:211.76.xxx.xxx 未訂閱

procedure TForm1.Button1Click(Sender: TObject);
var
dirname:Ansistring;
begin
dirname:='c:\mysql\bin\mysqladmin.exe -u root create mytest';
winexec(pchar(dirname),sw_minimize);
end;

這樣就可以 直接 create 一個database。

kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-07-30 08:10:11 IP:61.231.xxx.xxx 未訂閱

tame_cat_tail大哥:

謝啦。另外看tame_cat_tail大哥其他好幾篇MSSQL的文章,可否順便問問在mssql及PostgreSQL類似情況是如何下令自動產生資料庫的。先謝謝啦。

------
Kevin
系統時間:2024-05-19 19:04:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!