想用SQL语句在远程主机上建立一个数据库,该怎么写呢?麻烦大家看看我错在那里了

时间:2023-02-03 11:43:39
DataModule1->ADOConnection->Close();
          DataModule1->ADOConnection->Open();//连接是没有问题的
          DataModule1->NewQuery->Close();
          DataModule1->NewQuery->SQL->Clear();
          DataModule1->NewQuery->SQL->Add("USE master") ;
          DataModule1->NewQuery->SQL->Add("CREATE DATABASE NetChatData ");
          DataModule1->NewQuery->SQL->Add("ON");
          DataModule1->NewQuery->SQL->Add("( NAME = netchat_dat,");
          DataModule1->NewQuery->SQL->Add("FILENAME = '\\\\"+ServerEdit->Text+"\\c:\\program files\\Microsoft SQL Server\\mssql\\data\\NetChatDatadat.mdf',");
          DataModule1->NewQuery->SQL->Add( "SIZE = 10,");
          DataModule1->NewQuery->SQL->Add("MAXSIZE = 50,");
          DataModule1->NewQuery->SQL->Add( "FILEGROWTH = 5 )");
          DataModule1->NewQuery->SQL->Add( "LOG ON");
          DataModule1->NewQuery->SQL->Add("( NAME = 'netchat_log',");
          DataModule1->NewQuery->SQL->Add("FILENAME = '\\\\"+ServerEdit->Text+"\\c:\\program files\\Microsoft SQL Server\\mssql\\data\\NetChatDatalog.ldf',");
          DataModule1->NewQuery->SQL->Add("SIZE = 5MB,");
          DataModule1->NewQuery->SQL->Add("MAXSIZE = 25MB,");
          DataModule1->NewQuery->SQL->Add("FILEGROWTH = 5MB )");
           DataModule1->NewQuery->ExecSQL();//好象这里可以执行,但在主机上找不到数据库
          //在数据库中创建表( 出错提示好象就是在这里开始的)
          StepBar->Progress += 20;
          Label1->Caption = "创建数据库状态: 正在创建NetChat需要的系统数据表....";
          Sleep(1000);
          DataModule1->NewQuery->Close();
          DataModule1->NewQuery->SQL->Clear();
          DataModule1->NewQuery->SQL->Add("USE NetChatData") ;
          //--------------------------------------------------------------
          DataModule1->NewQuery->SQL->Add("create table userdata");
          DataModule1->NewQuery->SQL->Add("( ");
          DataModule1->NewQuery->SQL->Add("  号码        smallint NOT NULL,");
          DataModule1->NewQuery->SQL->Add("  头像        smallint NOT NULL,");
          DataModule1->NewQuery->SQL->Add("  昵称        varchar(20) NOT NULL,");
          
          DataModule1->NewQuery->ExecSQL();

          //--------------------------------------------------------------------------------------------
          //创建存储过程
          StepBar->Progress += 20;
          Label1->Caption =  "创建数据库状态:正在创建存储过程....";
          Sleep(1000);
          DataModule1->NewQuery->Close();
          DataModule1->NewQuery->SQL->Clear();
          DataModule1->NewQuery->SQL->Add("USE NetChatData");
          DataModule1->NewQuery->ExecSQL();
          DataModule1->NewQuery->Close();
          DataModule1->NewQuery->SQL->Clear();
          DataModule1->NewQuery->SQL->Add("CREATE PROCEDURE  newmember");
          DataModule1->NewQuery->SQL->Add("@age  smallint,");
          DataModule1->NewQuery->SQL->Add("@photo  smallint,");
          DataModule1->NewQuery->SQL->Add("@num smallint,");
          DataModule1->NewQuery->SQL->Add("@nickname    varchar(20),");
          DataModule1->NewQuery->SQL->Add("@psw             varchar(20),");
          DataModule1->NewQuery->SQL->Add("@sex              varchar(4),");
          DataModule1->NewQuery->SQL->Add("@truename     varchar(20),");
          DataModule1->NewQuery->SQL->Add("@attribute       varchar(6),");
          DataModule1->NewQuery->SQL->Add("@blood           varchar(4),");
          DataModule1->NewQuery->SQL->Add("@start            varchar(6),");
          DataModule1->NewQuery->SQL->Add("@page             varchar(30),");
          DataModule1->NewQuery->SQL->Add("@E_MAIL        varchar(30),");
          DataModule1->NewQuery->SQL->Add("@address        varchar(50),");
          DataModule1->NewQuery->SQL->Add("@phone          varchar(15),");
          DataModule1->NewQuery->SQL->Add("@introduce      text,");
          DataModule1->NewQuery->SQL->Add("@log                varchar(10),");
          DataModule1->NewQuery->SQL->Add("@status           varchar(20),");
          DataModule1->NewQuery->SQL->Add("@IP                 varchar(20),");
          DataModule1->NewQuery->SQL->Add(" @date             varchar(20)");
                                     

          DataModule1->NewQuery->SQL->Add("AS ");
          DataModule1->NewQuery->SQL->Add("insert into userdata ");
          DataModule1->NewQuery->SQL->Add("(号码,头像,昵称,真实姓名,E_MAIL,年龄,性别,电话,地址,自我介绍,密码,IP,注册日期,当前状态,是否验证,个人主页,星座,血型,生肖)");
          DataModule1->NewQuery->SQL->Add(" values(@num,@photo,@nickname,@truename,@E_MAIL,@age,@sex,@phone,@address,@introduce,@psw,@IP,@date,@status,@log,@page,@start,@blood,@attribute )");
          DataModule1->NewQuery->ExecSQL();

          //---------------------------------------------------------------------------------------------
          StepBar->Progress += 20;

          Label1->Caption =  "创建数据库状态:数据库创建完成,正在系统中注册该NetChat数据库....";
          Sleep(1000);
          //将配置信息写入注册表
           TRegistry* connectstr = new TRegistry;
            cnstr ="Provider=SQLOLEDB.1;Password="
                         +PswEdit->Text.Trim()+";Persist Security Info=False;User ID="
                         +AdmiEdit->Text.Trim()+";Initial Catalog=NetChatData;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID="
                         +ServerEdit->Text.Trim()+";Use Encryption for Data=False;Tag with column collation when possible=False";
             try
              {

                 connectstr->RootKey = HKEY_LOCAL_MACHINE;
                 connectstr->OpenKey("SOFTWARE\\NetChat服务器",true);
                 connectstr->WriteString("datapath",cnstr);
                 StepBar->Progress = 100;
                 Label1->Caption =  "创建数据库状态:创建数据库完成";
                 StepBar->Visible = false;
                 Label1->Visible = false;
                 delete connectstr;
                 MessageBox(NULL,"创建数据库成功完成,请重新启动NetChat服务管理器","系统信息",MB_YESNO|MB_ICONINFORMATION);

//后面的省略了,太长了,写不下,主要意思就是在远程主机上建立一个数据库

5 个解决方案

#1


把你的操作写在一个.sql文件里面。(用查询分析器创建)
或者你可以写成一个存储过程。
DataModule1->NewQuery->SQL->LoadFromFile(xxx);
我认为你的问题是bcb根本没有执行你的全部语句而只是第一行user master 所以没有报错也没有得到你要的结果,大概它只能执行一行。

#2


建议使用存储过程
你的代码没有看,具体的SQL语句我也忘记了,你最好把错误的具体位置或报告的错误贴出来!

#3


楼主还是分段执行看看,先看看库能否建立成功,以此类推:)

#4


搞定了,原来是我的连接字符串里面少写这个东西Data Scoure = 主机名;
因为以前一直是在本机上做的实验,所以没有问题,也一直没想到是那里的问题,昨天,我重头到尾把代码看了看,才找到问题,程序代码是没有错的。不过lilachue的建议很好,我以前都没想到可以这么做,节省了不少代码,还显得简洁。

#5


呵呵!多在数据库实际环境中试试,再在bcb中来调用,就可以

#1


把你的操作写在一个.sql文件里面。(用查询分析器创建)
或者你可以写成一个存储过程。
DataModule1->NewQuery->SQL->LoadFromFile(xxx);
我认为你的问题是bcb根本没有执行你的全部语句而只是第一行user master 所以没有报错也没有得到你要的结果,大概它只能执行一行。

#2


建议使用存储过程
你的代码没有看,具体的SQL语句我也忘记了,你最好把错误的具体位置或报告的错误贴出来!

#3


楼主还是分段执行看看,先看看库能否建立成功,以此类推:)

#4


搞定了,原来是我的连接字符串里面少写这个东西Data Scoure = 主机名;
因为以前一直是在本机上做的实验,所以没有问题,也一直没想到是那里的问题,昨天,我重头到尾把代码看了看,才找到问题,程序代码是没有错的。不过lilachue的建议很好,我以前都没想到可以这么做,节省了不少代码,还显得简洁。

#5


呵呵!多在数据库实际环境中试试,再在bcb中来调用,就可以