今天老板出难题!(200分)

  • 主题发起人 主题发起人 ygq
  • 开始时间 开始时间
Y

ygq

Unregistered / Unconfirmed
GUEST, unregistred user!
今天老板出了一个难题,是这样的:
先有一个程序把远端服务器上的SQL SERVER库中的内容导出到了文件,后缀是.yc,
不过仍然可以用文本文件打开,里面的内容是用逗号隔开,现在老板要我把这个文本文件再
写回另外一个SQL SERVER库,因为是.yc的后缀,所以我不知道怎么写这个程序,求救!
 
怎么样写出来,就怎么样写回去啊?用2个循环就搞定了。
 
你可以使用MS SQL提供的 sqldmo.dll来做MS SQL的备份和恢复

当然要看你的备份文件是用什么方法做的了
 
哎,.yc,是文本文件就好,数据控件可以直接读取文本格式的数据!这难道不是很简单吗
首先将所与.yc文件保存到一个目录中去,目录名子可以取的好听一些,因为将来要成为
一个数据库!然后建立一个文本驱动的ODBC,再用Delphi读就可以拉
 
不是这样的,因为我不知道这个程序的源代码,所以就只好从头开始了。好像是要把文件
内容一条一条读出来,去掉引号和逗号,然后再写回去。我不知道具体怎么写,如果谁有这
方面的源代码,请发给我好吗?
地址:litterbug@263.net

文本内容:举例
“"dsfdsf”,"324324","fgfgfg"
"dfsdfdf","3243434","dsfdsfds"
 
这个很简单,用copy函数就搞定了
 
1。用TTable或TQuery写代码,从每一个记录的每一个记录读取变量到一个数组,
再写到一个文本文件中

写入数据库的过程反过来就是了。

2.也可以用ODBC连接来连接一个txt文件来传数据

3.使用clientdataset的savetofile存数据, 再用LOADFROMFILE读入数据

4.用Ado的

问题啊。
procedure TForm1.Button1Click(Sender: TObject);
begin
adoquery1.SaveToFile('f:/temp/test.txt',pfTXT);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
adoquery1.LoadFromFile('f:/temp/test.txt');
end;


 
我现在能够写回去了,不过字段的引号我还是去不掉,难道就没有办法了吗?求救!
 
文本文件的格式(后缀.yc)是这样的:

"sa",0,"sdf","sdf","ewr"
"ds",1,"ewr","tyr","qww"
"sd",2,"ewy","xcv","vbn"
.............
如何做呢?如何才能把数据导入到SQL SERVER库?
 
如果是用C/C++的话很简明了:
sscanf(fn,"%s,%d,%s,%s,%s/n",&user,&level,......);
 
用一个record
 
这算难题码?方法太多了.比较简单的,可以直接导入,我用过.
用Access也可以直接导入。
 
你要是不用程序也可以直接用sql server的数据导入导出呀,我没试过,只是说说
 
难道就没有人能够解决吗?求救!!!!!
难道就没有人能够解决吗?求救!!!!!
难道就没有人能够解决吗?求救!!!!!
 
重新用SQL SERVER的备份功能备份一份,再用恢复功能生成一个数据库不就可以了吗?
 
不管是.yc还是什么东东,只要它能用文本格式打开,都可以轻松搞定。
fStream:TFileStream;
mStream:TMemoryStream;
fStream :=TFileStream.Create('.yc文件名',fmopenread);
mStream:=TMemoryStream.Create();
mStream.copyfrom(fStream);
for i:=0 to mStream.size-1 do
//处理你的数据
 
你比算是个问题,文件名不能更啊,文本文件导入数据库,多简单的事啊。看来你话该被开掉。
 
两种方法:
一种使用delphi中的文本数据库,或者是odbc中的文本数据库,具体的例子参见delphi目录
下的demos/db/textdate/texttest.dpr
一种方法是自己做一个到入的程序,参见我的程序:
procedure TF_Main.B_FaceMoneyClick(Sender: TObject);
VAR
F:TextFile;
s,p:string;
i:integer;
begin
opend.Title:='请选择导入文件';
// opend.InitialDir:=pathbank;目录名称自己定义
if opend.Execute then
p:=extractfileName(opend.FileName);
s:=p;
if (FileExists(p)) then
begin
AssignFile(F,p);
Reset(f);
//读入头信息
for i:=1 to 1 do
begin
readln(f);
end;
//读入导入数据
readln(f,s);
data.Cmd.commandText:='insert into Bank( Term, Date_Get, Code_Get, deposit) values(:Term, :Date_Get, :Code_Get, :deposit)';
data.Cmd.Parameters.ParamValues['Date_Get']:=datetostr(strtodate(StringReplace(copy(s,36,8),'/','-',[rfReplaceAll])));
while not eof(f) do //读入文件
with data.Cmd do
begin
temp.CommaText:=s;
s:=copy(s,pos(s,'"')+1,length(s)-pos(s,'"')+1);
Parameters.ParamValues['Term']:=copy(s,0,pos(s,'"'));
s:=copy(s,pos(s,'"')+1,length(s)-pos(s,'"')+1);
Parameters.ParamValues['Code_Get']:=copy(s,0,pos(s,'"'));
s:=copy(s,pos(s,'"')+1,length(s)-pos(s,'"')+1);
Parameters.ParamValues['deposit']:=copy(s,0,pos(s,'"'));
Execute;
readln(f,s);
end;
closefile(f);
end;
end;
这个问题有很多人问过了,最好查找以下以前的问题。
 
假设sLine为你取每一行用的变量名
取到后删除该行的"就行了:
var
sLine : string;
begin
sLine := '"sa",0,"sdf","sdf","ewr"';
sLine := StringReplace(sLine,'"','',[rfReplaceAll]); //将"用空替换等同删除
//得到sa,0,sdf,sdf,ewr,这个再写入数据库就很简单了吧,用Pos判断,位置再Copy就行了
ShowMessage(sLine);
end;
 
后退
顶部