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 所以没有报错也没有得到你要的结果,大概它只能执行一行。
或者你可以写成一个存储过程。
DataModule1->NewQuery->SQL->LoadFromFile(xxx);
我认为你的问题是bcb根本没有执行你的全部语句而只是第一行user master 所以没有报错也没有得到你要的结果,大概它只能执行一行。
#2
建议使用存储过程
你的代码没有看,具体的SQL语句我也忘记了,你最好把错误的具体位置或报告的错误贴出来!
你的代码没有看,具体的SQL语句我也忘记了,你最好把错误的具体位置或报告的错误贴出来!
#3
楼主还是分段执行看看,先看看库能否建立成功,以此类推:)
#4
搞定了,原来是我的连接字符串里面少写这个东西Data Scoure = 主机名;
因为以前一直是在本机上做的实验,所以没有问题,也一直没想到是那里的问题,昨天,我重头到尾把代码看了看,才找到问题,程序代码是没有错的。不过lilachue的建议很好,我以前都没想到可以这么做,节省了不少代码,还显得简洁。
因为以前一直是在本机上做的实验,所以没有问题,也一直没想到是那里的问题,昨天,我重头到尾把代码看了看,才找到问题,程序代码是没有错的。不过lilachue的建议很好,我以前都没想到可以这么做,节省了不少代码,还显得简洁。
#5
呵呵!多在数据库实际环境中试试,再在bcb中来调用,就可以
#1
把你的操作写在一个.sql文件里面。(用查询分析器创建)
或者你可以写成一个存储过程。
DataModule1->NewQuery->SQL->LoadFromFile(xxx);
我认为你的问题是bcb根本没有执行你的全部语句而只是第一行user master 所以没有报错也没有得到你要的结果,大概它只能执行一行。
或者你可以写成一个存储过程。
DataModule1->NewQuery->SQL->LoadFromFile(xxx);
我认为你的问题是bcb根本没有执行你的全部语句而只是第一行user master 所以没有报错也没有得到你要的结果,大概它只能执行一行。
#2
建议使用存储过程
你的代码没有看,具体的SQL语句我也忘记了,你最好把错误的具体位置或报告的错误贴出来!
你的代码没有看,具体的SQL语句我也忘记了,你最好把错误的具体位置或报告的错误贴出来!
#3
楼主还是分段执行看看,先看看库能否建立成功,以此类推:)
#4
搞定了,原来是我的连接字符串里面少写这个东西Data Scoure = 主机名;
因为以前一直是在本机上做的实验,所以没有问题,也一直没想到是那里的问题,昨天,我重头到尾把代码看了看,才找到问题,程序代码是没有错的。不过lilachue的建议很好,我以前都没想到可以这么做,节省了不少代码,还显得简洁。
因为以前一直是在本机上做的实验,所以没有问题,也一直没想到是那里的问题,昨天,我重头到尾把代码看了看,才找到问题,程序代码是没有错的。不过lilachue的建议很好,我以前都没想到可以这么做,节省了不少代码,还显得简洁。
#5
呵呵!多在数据库实际环境中试试,再在bcb中来调用,就可以