三层结构的数据库中如何在客户端动态建立一个新表,请高人指点,谢谢!

解决方案 »

  1.   

    直接用SQL语句建表,如:CREATE TABLE T_TABLEINF(C_USERNAME VARCHAR2(25)   NOT NULL)
    具体:看你用什么方法:比如是ADO还是用BDE
    我通常是用ADO,下面代码自己去看吧:
    procedure Tfrm_main.Sb_execsqlClick(Sender: TObject);
    var
      oneline,SqlHear,ls_temp:string;
      ch1:char;
      i,li_EXEcount:integer;
      Llt_SaveSql:Tlistitem;
    begin
      //开始效验SQL语句的正确性
      sqlhear:='';
      oneline:=trim(Memo_WrieteSQL.Lines.Strings[0]);
      i:=0;
      repeat
        i:=i+1;
        ch1:=oneline[i];
        SqlHear:=SqlHear+ch1;
      until ch1=' ' ;
      SqlHear:=trim(uppercase(sqlhear));
      if (SqlHear='SELECT') or (SqlHear='CREATE') or (SqlHear='DELETE')
         or (SqlHear='INSERT') or (SqlHear='UPDATE') then
         else
         begin
           messagedlg('SQL命令不正确'+#13+'[提示]本软件暂时只支持:'+#13+
                      'SELECT[查询]'+#13+'INSERT[插入]'+#13+
                      'DELETE[删除]'+#13+'CREATE[建立]'+#13+
                      'UPDATE[更新]',mtError,[mbOK],0);
           exit;
         end;
      //**********开始连接数据库***************************************************
      //if prs_DBtype='ORACLE' then frm_db.ADOQ_ExecuteSQL.Connection:=frm_db.ADOC_ORACLE
      //else frm_db.ADOQ_ExecuteSQL.Connection:=frm_db.ADOC_ODBC;
      try
        with frm_db.ADOC_ExecuteSQL do
        begin
          Connected:=false;
          ConnectionString:=pus_connectparam;
          LoginPrompt:=false;
          Connected:=true;
        end;
      except
        raise ERangeError.CreateFmt('数据库还没有连接上,无法执行SQL语句...错误代号:%d',[10001]);
      end;
      //*************开始执行SQL语句******************************************
      with frm_db.ADOQ_ExecuteSQL do
      begin
        Connection:=frm_db.ADOC_ExecuteSQL;
        close;
        sql.Clear;
        sql.Add(UpperCase(Memo_WrieteSQL.Lines.Text));
        try
          if sqlhear='SELECT'
          then begin
            open;
            DBGrid_ExecuteSQL.Visible:=true;
            statusbar_top.Panels[1].Text:='共查询到 '+inttostr(RecordCount)+' 条记录';
          end
          else begin ExecSQL;
            DBGrid_ExecuteSQL.visible:=false;
            statusbar_top.Panels[1].Text:='执行'+sqlhear+'命令成功!';
          end;
        except
            raise ERangeError.CreateFmt('非法SQL语句'+#13+
            '如果语法正确,可能SQL执行对象不在当前用户:'+Pus_CurconnectUser+'内'+
            #13+'[错误代号:%d]',[1763]);
        end;
      end;
      //效验是否有重复执行的SQL语句
      if Not Pop_EnabledRepeatHistorySql.Checked then
      begin
        Li_EXEcount:=LV_SaveSql.Items.Count;
        for i:=0 to Li_EXEcount-1 do
        begin
          Llt_SaveSql:=LV_SaveSql.Items[i];
          oneline:=UpperCase(trim(Memo_WrieteSQL.Lines.Text));
          ls_temp:=Llt_SaveSql.SubItems.Strings[1];
          if oneline=ls_temp then exit;
        end;
        next;
      end;
      //*******开始写SQL执行的历史记录****************************
      ls_temp:=datetimetostr(now());
      Llt_SaveSql:=LV_SaveSql.Items.Add;
      Llt_SaveSql.Caption:=ls_temp;
      Llt_SaveSql.SubItems.Add(Pus_CurconnectUser);
      Llt_SaveSql.SubItems.add(UpperCase(trim(Memo_WrieteSQL.Lines.Text)));
      Llt_SaveSql.SubItems.add(Prs_DBtype);
      if prs_DBtype='ORACLE' then
        Llt_SaveSql.SubItems.add('Microsoft OLE DB Provider for ORACLE')
      else Llt_SaveSql.SubItems.add('Microsoft OLE DB Provider for ODBC Drivers');
      Llt_SaveSql.SubItems.add(pus_connectparam);
      Llt_SaveSql.SubItems.Add(sqlhear);
    end;
      

  2.   

    在sql server2000的帮助下找  CREATE TABLE。说的又清楚又简单易懂。还有例子语句。通过这个是最简单的。
      

  3.   

    clientdataset.commandtext:='create table..........'
      

  4.   

    最理想的方法是调用接口,具体实现在server端做,这样符合封装规则
      

  5.   

    create talbe AA
    (id int is null,name varchar(10) null)