delphi 建表处理工具

unit UcreateTableTool;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxControls, cxLookAndFeels, cxLookAndFeelPainters,
  cxContainer, cxEdit, dxSkinsCore, dxSkinsDefaultPainters, cxTextEdit, cxMemo,
  StdCtrls, cxSplitter, ExtCtrls, QRExport, TeEngine, TeeURL, TeeExcelSource,
  ExtDlgs, cxMaskEdit, cxButtonEdit, cxGraphics,ComObj;

type
  Tfrmcreatetabletool = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    right: TcxMemo;
    Button1: TButton;
    choosefile: TcxButtonEdit;
    OpenTextFileDialog1: TOpenTextFileDialog;
    SaveDialog1: TSaveDialog;
    edtdbname: TcxTextEdit;
    edttablename: TcxTextEdit;
    edtsheetcounts: TcxTextEdit;
    Label1: TLabel;
    Label2: TLabel;
    comboxtablenames: TComboBox;
    btnaddfield: TButton;
    edtfieldname: TcxTextEdit;
    edttype: TcxTextEdit;
    edtremark: TcxTextEdit;
    procedure Button1Click(Sender: TObject);
    procedure choosefilePropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure comboxtablenamesChange(Sender: TObject);
    procedure btnaddfieldClick(Sender: TObject);
  private
    { Private declarations }
    sqlstr1,sqlstr2,sqlstrs3,sqlstr4,sqlstr5,sqlstr6:string;
  public
    { Public declarations }
  end;

var
  frmcreatetabletool: Tfrmcreatetabletool;
const const1 =   'USE [dbname] '+#13#10
                +'GO ' +#13#10
                +#13#10
                +'SET ANSI_NULLS ON ' +#13#10
                +'GO ' +#13#10
                +#13#10
                +'SET QUOTED_IDENTIFIER ON ' +#13#10
                +'GO' +#13#10
                +#13#10
                +'SET ANSI_PADDING ON' +#13#10
                +'GO';
const const2 = 'CREATE TABLE [dbo].[tablename](';
const const3 = '[columname] type ';
const const4 =  ' CONSTRAINT [PK_tablename] PRIMARY KEY CLUSTERED'+#13#10
               +'('+#13#10
               +'[columname] ASC '+#13#10
               +')WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]'+#13#10
               +') ON [PRIMARY]'
               +#13#10
               +'GO'+#13#10
               +#13#10
               +'SET ANSI_PADDING OFF '+#13#10
               +'GO';

const const5 = 'CONSTRAINT [DF_tablename_columname]  DEFAULT (value)';

const const6 = 'EXEC sys.sp_addextendedproperty @name=N''MS_Description'', @value=N''decription_value'' , @level0type=N''SCHEMA'',@level0name=N''dbo'', @level1type=N''TABLE'',@level1name=N''tablename'', @level2type=N''COLUMN'',@level2name=N''columname'''
               +#13#10+'GO';

implementation

{$R *.dfm}

{添加字段}
procedure Tfrmcreatetabletool.btnaddfieldClick(Sender: TObject);
var
  str1:String;
  str2:string;
  str3:string;
begin

   str1 :=   'USE [dbname] '+#13#10
           +'GO ' +#13#10;
   str1 := StringReplace(str1,'[dbname]',trim(edtdbname.Text), [rfReplaceAll,rfIgnoreCase]);
   if Pos(str1,right.Lines.Text)<=0 then
   begin
     right.Lines.Add(str1);
   end;
   str2 := 'ALTER TABLE [tablename] add [fieldname] [fieldtype] ';
   str2 :=  StringReplace(str2,'[tablename]',trim(edttablename.Text), [rfReplaceAll,rfIgnoreCase]);
   str2 :=  StringReplace(str2,'[fieldname]',trim(edtfieldname.Text), [rfReplaceAll,rfIgnoreCase]);
   str2 :=  StringReplace(str2,'[fieldtype]',trim(edttype.Text), [rfReplaceAll,rfIgnoreCase]);
   if Pos(str2,right.Lines.Text)<=0 then
   begin
     right.Lines.Add(str2);
   end;
   str3 := 'EXEC sys.sp_addextendedproperty @name=N''MS_Description'', '
               +'@value=N''[decription_value]'' , @level0type=N''SCHEMA'','
               +'@level0name=N''dbo'', @level1type=N''TABLE'',@level1name=N''[tablename]'', '
               +'@level2type=N''COLUMN'',@level2name=N''[columname]'''
            +#13#10+'GO';
   str3 :=  StringReplace(str3,'[decription_value]',trim(edtremark.Text), [rfReplaceAll,rfIgnoreCase]);
   str3 :=  StringReplace(str3,'[tablename]',trim(edttablename.Text), [rfReplaceAll,rfIgnoreCase]);
   str3 :=  StringReplace(str3,'[columname]',trim(edtfieldname.Text), [rfReplaceAll,rfIgnoreCase]);

   if Pos(str3,right.Lines.Text)<=0 then
   begin
     right.Lines.Add(str3);
   end;

end;

procedure Tfrmcreatetabletool.Button1Click(Sender: TObject);
var
  iRow,iRowCnt:integer;
  myexcel:OleVariant;
  col1,col2,col3,col4,col5:string;
  strDM:string;
begin
   sqlstr1 := '';
   sqlstr2 := '';
   sqlstr4 := '';
   sqlstrs3 := '';
   sqlstr6 := '';
   sqlstr5 := '';
   if not FileExists(choosefile.Text)  then
    //未发Excel路径
    begin
      ShowMessage('未发现表');
      exit;
    end;

    try
      myexcel := Createoleobject('Excel.Application');
    except
      ShowMessage('无法创建Excel对象,请确认是否正确安装Excel');
      Exit;
    end;

    right.Lines.Clear;
    sqlstr1 := StringReplace(const1,'dbname',edtdbname.Text,[rfReplaceAll,rfIgnoreCase]);
    right.Lines.Add(sqlstr1);
    sqlstr2 := StringReplace(const2,'tablename',edttablename.Text,[rfReplaceAll,rfIgnoreCase]);
    right.Lines.Add(sqlstr2);
    try
      myexcel.Workbooks.Open(choosefile.Text);
      myexcel.WorkSheets[edttablename.Text].activate;
      iRowCnt := 744110;
      strDM :='' ;
      for iRow:=2 to iRowCnt do
      begin
        if (Trim(myexcel.Cells[iRow,1].Value) = '')
           and (Trim(myexcel.Cells[iRow,2].Value) = '')
           and (Trim(myexcel.Cells[iRow,3].Value) = '')
           and (Trim(myexcel.Cells[iRow,4].Value) = '')
           and (Trim(myexcel.Cells[iRow,4].Value) = '') then break;  //说明行已经到尽头

        col1 := Trim(widestring(myexcel.Cells[iRow,1].Value));
        col2 := Trim(widestring(myexcel.Cells[iRow,2].Value));
        col3 := Trim(widestring(myexcel.Cells[iRow,3].Value));
        col4 := Trim(widestring(myexcel.Cells[iRow,4].Value));
        col5 := Trim(widestring(myexcel.Cells[iRow,5].Value));

        if iRow = 2 then
        begin
           sqlstr4 :=  StringReplace(const4,'tablename',edttablename.Text,
                        [rfReplaceAll,rfIgnoreCase]);
           sqlstr4 := StringReplace(sqlstr4,'columname',col1,
                        [rfReplaceAll,rfIgnoreCase]);
        end;

         sqlstrs3 :=  StringReplace(const3,'columname',col1,
                        [rfReplaceAll,rfIgnoreCase]);
         sqlstrs3 :=  StringReplace(sqlstrs3,'type',col2,
                        [rfReplaceAll,rfIgnoreCase]);

         if col3<>'' then
         begin
            sqlstr5 :=
            StringReplace(const6,'tablename',edttablename.Text,
                        [rfReplaceAll,rfIgnoreCase]);
            sqlstr5 :=
            StringReplace(sqlstr5,'columname',col1,
                        [rfReplaceAll,rfIgnoreCase]);
            sqlstr5 := StringReplace(sqlstr5,'decription_value',col3,
                        [rfReplaceAll,rfIgnoreCase])+#13#10;

            sqlstr6 := sqlstr6 + sqlstr5;
         end;

         if (col4 ='*') or (col4 = '主键')  then
         begin
           sqlstrs3 := sqlstrs3 +' NOT NULL ';
         end
         else
         begin
           sqlstrs3 := sqlstrs3 +'  NULL ';
         end;
         if col5<>'' then
         begin
            sqlstrs3 := sqlstrs3 + const5;
            sqlstrs3 :=  StringReplace(sqlstrs3,'tablename',edttablename.Text,
                        [rfReplaceAll,rfIgnoreCase]);
            sqlstrs3 :=  StringReplace(sqlstrs3,'columname',col1,
                        [rfReplaceAll,rfIgnoreCase]);
            sqlstrs3 :=  StringReplace(sqlstrs3,'value',col5,
                        [rfReplaceAll,rfIgnoreCase]);
         end;
         sqlstrs3 := sqlstrs3 +', ';
         right.Lines.add(sqlstrs3);
      end;


    finally
      myexcel.Quit;
    end;
    right.Lines.Add(sqlstr4);
    right.Lines.Add(sqlstr6);
end;

procedure Tfrmcreatetabletool.choosefilePropertiesButtonClick(Sender: TObject;
  AButtonIndex: Integer);
var
  myexcel:OleVariant;
  I:integer;
begin
  if OpenTextFileDialog1.Execute()  then
  begin
     choosefile.Text := OpenTextFileDialog1.FileName;
  end;

  if not FileExists(choosefile.Text)  then
  //未发Excel路径
  begin
    ShowMessage('未发现表');
    exit;
  end;

  try
    myexcel := Createoleobject('Excel.Application');
  except
    ShowMessage('无法创建Excel对象,请确认是否正确安装Excel');
    Exit;
  end;

   try
     myexcel.Workbooks.Open(choosefile.Text);
     edtsheetcounts.Text := IntToStr(myexcel.worksheets.count);
     comboxtablenames.Items.Clear;
     for I := 1 to myexcel.worksheets.count  do
     begin
        comboxtablenames.Items.Add(WideString(myexcel.Sheets[i].Name));
     end;
     comboxtablenames.ItemIndex := 0;
     edttablename.Text := comboxtablenames.Text;
   finally
      myexcel.Quit;
   end;


end;



procedure Tfrmcreatetabletool.comboxtablenamesChange(Sender: TObject);
begin
    edttablename.Text := comboxtablenames.Text;
end;

end.

1.操作界面

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Listest

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值