📄 exportsql.pas
字号:
TablesCheckListBox.ItemIndex := i;
StrProgress := 'Table ' + inttostr(tablecounter) + '/' + inttostr(tcount) + ': ' + TablesCheckListBox.Items[i];
Label2.caption := StrProgress;
if exportstruc then begin
if mysql_version < 32320 then begin
GetResults( 'SHOW FIELDS FROM ' + mainform.mask(TablesCheckListBox.Items[i]), ZQuery3 );
fieldcount := ZQuery3.FieldCount;
end else begin
GetResults('SHOW CREATE TABLE ' + mainform.mask(TablesCheckListBox.Items[i]), ZQuery3 );
end;
createquery := '';
if tofile then begin
createquery := '#' + crlf;
createquery := createquery + '# Table structure for table ''' + TablesCheckListBox.Items[i] + '''' + crlf;
createquery := createquery + '#' + crlf + crlf;
end;
if CheckBoxWithDropTable.checked and CheckBoxWithDropTable.Enabled then begin
if tofile then
createquery := createquery + 'DROP TABLE IF EXISTS ' + mask(TablesCheckListBox.Items[i]) + ';' + crlf
else
dropquery := createquery + 'DROP TABLE IF EXISTS ' + mask(DB2Export) + '.' + mask(TablesCheckListBox.Items[i]) + '' + crlf;
end;
if mysql_version < 32320 then begin
if tofile then
createquery := createquery + 'CREATE TABLE IF NOT EXISTS ' + mask(TablesCheckListBox.Items[i]) + ' (' + crlf
else
createquery := createquery + 'CREATE TABLE IF NOT EXISTS ' + mask(DB2Export) + '.' + mask(TablesCheckListBox.Items[i]) + ' (' + crlf;
end else begin
if CheckBoxuseBackticks.checked then
createquery := createquery + ZQuery3.Fields[1].AsString
else
createquery := createquery + stringreplace(ZQuery3.Fields[1].AsString, '`', '', [rfReplaceAll]);
end;
if mysql_version < 32320 then begin
for j := 1 to fieldcount do
begin
createquery := createquery + ' ' + mask(ZQuery3.Fields[0].AsString) + ' ' + ZQuery3.Fields[1].AsString;
if ZQuery3.Fields[2].AsString <> 'YES' then
createquery := createquery + ' NOT NULL';
if ZQuery3.Fields[4].AsString <> '' then
createquery := createquery + ' DEFAULT ''' + ZQuery3.Fields[4].AsString + '''';
if ZQuery3.Fields[5].AsString <> '' then
createquery := createquery + ' ' + ZQuery3.Fields[5].AsString;
if j < fieldcount then
createquery := createquery + ',' + crlf;
end;
// Keys:
GetResults( 'SHOW KEYS FROM ' + TablesCheckListBox.Items[i], ZQuery3 );
setLength(keylist, 0);
keystr := '';
if ZQuery3.RecordCount > 0 then
keystr := ',';
for j := 1 to ZQuery3.RecordCount do
begin
which := -1;
for k:=0 to length(keylist)-1 do
begin
if keylist[k].Name = ZQuery3.Fields[2].AsString then // keyname exists!
which := k;
end;
if which = -1 then
begin
setlength(keylist, length(keylist)+1);
which := high(keylist);
keylist[which].Columns := TStringList.Create;
with keylist[which] do // set properties for new key
begin
Name := ZQuery3.Fields[2].AsString;
if ZQuery3.Fields[2].AsString = 'PRIMARY' then
_type := 'PRIMARY'
else if ZQuery3.FieldCount >= 10 then if ZQuery3.Fields[9].AsString = 'FULLTEXT' then
_type := 'FULLTEXT'
else if ZQuery3.Fields[1].AsString = '1' then
_type := ''
else if ZQuery3.Fields[1].AsString = '0' then
_type := 'UNIQUE';
end;
end;
keylist[which].Columns.add(mask(ZQuery3.Fields[4].AsString)); // add column(s)
ZQuery3.Next;
end;
for k:=0 to high(keylist) do
begin
if k > 0 then
keystr := keystr + ',';
if keylist[k].Name = 'PRIMARY' then
keystr := keystr + crlf + ' PRIMARY KEY ('
else
keystr := keystr + crlf + ' ' + keylist[k]._type + ' KEY ' + keylist[k].Name + ' (';
keystr := keystr + implodestr(',', keylist[k].Columns) + ')';
end;
createquery := createquery + keystr + crlf + ')';
end; // mysql_version < 32320
feldnamen := '';
if CheckBoxCompleteInserts.Checked then
begin
feldnamen := ' (';
GetResults( 'SHOW FIELDS FROM ' + mainform.mask(TablesCheckListBox.Items[i]), ZQuery3 );
for k:=1 to ZQuery3.RecordCount do
begin
if k>1 then
feldnamen := feldnamen + ', ';
feldnamen := feldnamen + mask(ZQuery3.Fields[0].AsString);
ZQuery3.Next;
end;
feldnamen := feldnamen+')';
end;
// File:
if tofile then begin
createquery := createquery + ';' + crlf;
wfs(f);
wfs(f);
wfs(f, createquery);
end
// Another Database
else if RadioButtonDB.Checked then begin
if mysql_version >= 32320 then
ExecQuery( 'USE ' + DB2Export );
if CheckBoxWithDropTable.checked and CheckBoxWithDropTable.Enabled then
ExecQuery( dropquery );
ExecQuery( createquery );
if mysql_version >= 32320 then
ExecQuery( 'USE ' + DBComboBox.Text );
end
// Another Host / DB:
else if RadioButtonHost.Checked then begin
if mysql_version >= 32320 then
win2export.ExecQuery('USE ' + DB2Export);
if CheckBoxWithDropTable.checked and CheckBoxWithDropTable.Enabled then
win2export.ExecQuery(dropquery);
win2export.ExecQuery(createquery);
end;
ProgressBar1.StepIt;
end;
// export data:
if exportdata then
begin
GetResults( 'SELECT * FROM ' + mainform.mask(TablesCheckListBox.Items[i]), ZQuery3 );
if tofile then
begin
wfs(f);
wfs(f);
wfs(f, '#');
wfs(f, '# Dumping data for table ''' + TablesCheckListBox.Items[i] + '''');
wfs(f, '#');
wfs(f);
end;
for j:=1 to ZQuery3.RecordCount do
begin
Label2.caption := StrProgress + ' (Record ' + inttostr(j) + ')';
Application.ProcessMessages;
if tofile then
insertquery := 'INSERT INTO ' + mask(TablesCheckListBox.Items[i])
else
insertquery := 'INSERT INTO ' + mask(DB2Export) + '.' + mask(TablesCheckListBox.Items[i]);
insertquery := insertquery + feldnamen;
insertquery := insertquery + ' VALUES(';
for k := 0 to ZQuery3.fieldcount-1 do
begin
if Not ZQuery3.Fields[k].IsNull then begin
value := QuotedStr(ZQuery3.Fields[k].AsString);
end
else
value := 'NULL';
insertquery := insertquery + value;
if k < ZQuery3.Fieldcount-1 then
insertquery := insertquery + ', ';
end;
insertquery := insertquery + ')';
if tofile then
wfs(f, insertquery + ';')
else if RadioButtonDB.Checked then
ExecQuery(insertquery)
else if RadioButtonHost.Checked then
win2export.ExecQuery(insertquery);
ZQuery3.Next;
end;
ProgressBar1.StepIt;
end;
end;
if ActualDatabase <> '' then
ExecQuery( 'USE ' + ActualDatabase );
end;
FINALLY
if tofile then f.Free;
Screen.Cursor := crDefault;
END;
close;
end;
procedure TExportSQLForm.RadioButtonDBClick(Sender: TObject);
begin
if DBComboBox.Items.Count <= 1 then begin
MessageDLG('There must be more than one database to enable this option.', mtError, [mbOK], 0);
RadioButtonFile.OnClick(self);
abort;
end;
RadioButtonFile.Checked := false;
RadioButtonHost.Checked := false;
RadioButtonDB.Checked := true;
EditFileName.Enabled := false;
EditFileName.Color := clBtnFace;
BitBtn1.Enabled := false;
ComboBoxODB.Enabled := true;
ComboBoxODB.Color := clWindow;
ComboBoxHost.Enabled := false;
ComboBoxHost.Color := clBtnFace;
CheckBoxWithUseDB.Enabled := false;
ComboBoxODB.SetFocus;
end;
procedure TExportSQLForm.RadioButtonFileClick(Sender: TObject);
begin
RadioButtonFile.Checked := true;
RadioButtonDB.Checked := false;
RadioButtonHost.Checked := false;
EditFileName.Enabled := true;
EditFileName.Color := clWindow;
BitBtn1.Enabled := true;
ComboBoxODB.Enabled := false;
ComboBoxODB.Color := clBtnFace;
ComboBoxHost.Enabled := false;
ComboBoxHost.Color := clBtnFace;
CheckBoxWithUseDB.Enabled := true;
EditFileName.SetFocus;
end;
procedure TExportSQLForm.fillcombo_anotherdb(Sender: TObject);
begin
ComboBoxODB.Items := DBComboBox.Items;
ComboBoxODB.Items.delete(DBComboBox.ItemIndex);
if ComboBoxODB.ItemIndex = -1 then
ComboBoxODB.ItemIndex := 0;
end;
procedure TExportSQLForm.CheckBox1Click(Sender: TObject);
begin
CheckBoxWithDropTable.Enabled := CheckBox1.checked;
if CheckBox1.Checked or CheckBox2.Checked then
Button1.Enabled := true
else
Button1.Enabled := false;
end;
procedure TExportSQLForm.RadioButtonHostClick(Sender: TObject);
begin
if ComboBoxHost.Items.Count = 0 then begin
MessageDLG('You need at least two open connection-windows to enable this option.', mtError, [mbOK], 0);
RadioButtonFile.OnClick(self);
abort;
end;
RadioButtonFile.Checked := false;
RadioButtonDB.Checked := false;
RadioButtonHost.Checked := true;
EditFileName.Enabled := false;
EditFileName.Color := clBtnFace;
BitBtn1.Enabled := false;
ComboBoxODB.Enabled := false;
ComboBoxODB.Color := clBtnFace;
ComboBoxHost.Enabled := true;
ComboBoxHost.Color := clWindow;
CheckBoxWithUseDB.Enabled := false;
ComboBoxHost.SetFocus;
end;
procedure TExportSQLForm.CheckBox2Click(Sender: TObject);
begin
if CheckBox1.Checked or CheckBox2.Checked then
Button1.Enabled := true
else
Button1.Enabled := false;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -