delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks

#

delphi 7中RAVE5的一个问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222182147154.html
我用DELPHI7中的rave5做的报表,不能选页打印,该怎么办,我想再装一个高版本的rave再重新编译一下,可是怎么也装不上,说是duplicate   license   find,please   install   a   separately   version   on   this   system.问各位高手我该怎么半,急死了,我都做了好多了   该怎么办啊!

把以前的先删喽   RAVE打印   调用打印预览好象可以选打吧

在打印预览里可以选择的   但是选择了之后好像没用,他还是会把全部都打印出来,还有怎么把以前的完全删除,估计我没有完全删除,请指教阿!

怎么办啊,也每人帮我!

我自己顶,要不然就找不到了啊

posted @ 2008-12-11 10:10 delphi2007 阅读(156) | 评论 (0)编辑 收藏

图片显示 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222175017155.html
我有个存放各种类型的图片的数据表,例如有BMP,JPEG等,想用TImage控件显示出来,要怎么做?类似的也行.

多格式不知道怎么判断...  
  我自己程序用jpg的  
   
  if   not   adoquery1.FieldByName('image').IsNull   then  
  begin  
    mstream:=tmemorystream.Create;  
        jpgfile:=tjpegimage.Create;  
        tblobfield(adoquery1.FieldByName('image')).SaveToStream(mstream);  
        mstream.Position:=0;  
        jpgfile.LoadFromStream(mstream);  
   
        Image1.Picture.Assign(jpgfile);  
  end;  
 

楼上的   会出现"JPEG   error   #53"的错误  
  我的表中现在有BMP的和JPEG格式的图   我想看看有没有能方法显示出来也能显示wmf的

posted @ 2008-12-11 10:10 delphi2007 阅读(180) | 评论 (0)编辑 收藏

超难解决的逻辑错误问题? 急急急 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222173752156.html
 
  我的程序面板上放有:DBGrid,AdoQuery等,还有“下一条记录”,“上一条记录”,“删除当前记录”等按扭,程序启动时DBGrid为空,此时点击上面任何一按扭,程序报错退出。  
  以“删除”按纽为例,我的程序如下:  
  procedure   TForm1.Button5Click(Sender:   TObject);  
  begin  
  adoquery1.open;                                                                        
    if   adoquery1.RecordCount=0   then                                        
      MessageBox(0,'SetCommMask   Error   !','Notice',MB_OK)  
    else  
  if   Application.MessageBox('是否删除当前记录?','提示',mb_yesno)=id_yes   then  
  ADOQuery1.Delete;  
  end;  
  为了执行是否adoquery1.RecordCount=0,必须adoquery1.open,但是当   adoquery1.RecordCount=0时,Adoquery1.SQL.Text:=''此时就不能和数据库想连,当然就不能去计算Recordcount,想了一天了,脑袋都大了,哪位大哥帮帮我啊,感激涕零。  
  如果问题没搞清,QQ:110546987在线等到,bearzmc@163.com.谢谢

没看明白说得是什么?

procedure   TForm1.Button5Click(Sender:   TObject);  
  begin  
  adoquery1.close;  
  adoquery1.sql.clear;  
  adoquery1.add('select   *   from   table   where   .....');  
  adoquery1.open;                                                                        
    if   adoquery1.RecordCount=0   then                                        
      MessageBox(0,'SetCommMask   Error   !','Notice',MB_OK)  
    else  
  if   Application.MessageBox('是否删除当前记录?','提示',mb_yesno)=id_yes   then  
  begin  
    ADOQuery1.close;  
    ADOQuery1.sql.clear;  
    ADOQuery1.sql.add('delete   table   where   ....');  
    ADOQuery1.execsql;  
  end;  
  end;

posted @ 2008-12-11 10:10 delphi2007 阅读(94) | 评论 (0)编辑 收藏

dbgrid 转换成Txt Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222172931157.html
我希望利用ado   控件,请给出详细代码?

如果想比较快,可以用dbgrideh控件或者cxgrid,他们都提供了导出功能。  
  不用控件,可以自己先创建txt文件,自己写导出,

DM.DataSet.SaveToFile('C:\我的文件.dbt',pfADTG);  
  //导出来的文件扩展名你自己随便定,   但是估计你看不懂里面的内容,要想导出标准的文本,你可以   导出成xml文件~!

你要保存成xml   就在后面使用pfXML  
 

 
      for   循环写   txt

while   not   DataModule1.ADOQuery.Eof   do  
  begin  
      n1   :=   DataModule1.ADOQuery.fieldbyName('KQJHZD').AsString;  
      n2   :=   DataModule1.ADOQuery.fieldbyName('BHZD').AsString;  
      n3   :=   DataModule1.ADOQuery.fieldbyName('BC1').AsString;  
      n4date   :=   DataModule1.ADOQuery.fieldbyName('RQZD').AsDateTime;  
      n4   :=   DateToStr(n4Date);  
   
      n5   :=   DataModule1.ADOQuery.fieldbyName('SJZD').AsString;  
   
      TxtStr   :=   '   '+   n1+'   '+   ','+'   '+   n2+'   '+   ','+'   '+   n3+'   '+   ','+'   '+   n4+'   '+   ','+'   '+   n5+'   ';  
   
      AssignFile(F,   SavePath);  
      Append(F);  
      Writeln(F,   TxtStr);  
      CloseFile(F);  
      DataModule1.ADOQuery.Next;  
  end;  
  这是我用过的一个方法,但愿对你有点帮助

我要显示的字段有40个左右,难道要定义40个变量吗?  
  还要别的方法吗?

在while循环中可以加入For  
  for   I:=0   to   fieldcount-1   do  
  LinesStr:=LinesStr+Fields[I].asstring+',';   这样就不需要定义变量了!

上面的写文件有问题,打开和关闭文件不应该出现在循环体内。循环开始就打开准备写,结束之后再关闭。

posted @ 2008-12-11 10:10 delphi2007 阅读(180) | 评论 (0)编辑 收藏

如果赋值数据集 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222170119158.html
问题1.  
    我有把一个TADOQuery1作为参数传递给一个函数  
    如果按TADOQuery1的设置重新去数据库中取数据出来  
  问题2.  
    如何把这个控件得到的数据集作为返回值赋给result呢?

function   getResultSet(vQuery:   TADOQuery):   TAdoQuery;  
  begin  
      ......  
      Result   :=   vQuery;  
  end;  
   
  不过没明白你为什么要返回一个数据集呢,直接用query不行吗

觉得存到clientdataset里面比较好,相当于临时内存表

你的思路是错误的,定义的ADOquery是作为传地址引用的,比如说你这个函数的Vquery用的是已经实例化的ADOquery,那么你只要写procedure就可以了,执行完过程,就直接在adoquery中看到结果  
  如果您确实想返回数据集,最好定义_recordser

我想让一个函数用代码方式建立一个TADOQUERY取完数据  
  然后把recordset赋值回去就可以释放这个函数中创建的对像了。  
  通过clone()方法好像可以实现了  
 

你定义_RecordSet类型,将ADODataSet1.Recordset复制给它

posted @ 2008-12-11 10:10 delphi2007 阅读(168) | 评论 (0)编辑 收藏

对查询出来的记录行进行分页显示,怎么做???在客户现场,哪位大虾帮忙?急急急 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222165453159.html
对于查询出来的记录行,我想每40条一页来显示,每次查询的记录行会不一样  
  最后一页显示出它的余数  
  界面上会有四个按钮,首页,上一页,下一页,末页  
  用来翻页使用  
  应该怎么做??

DBGrid和DataSource连接,DataSource和ADODataSet1连接。  
      ADODataSet1.Open;  
       
      ADODataSet1.Recordset.PageSize   :=   40;  
      ADODataSet1.Recordset.AbsolutePosition   :=   1;

或者参考一下  
  http://topic.csdn.net/t/20021127/13/1209697.html

我想要事例代码,谢谢!

msort   :=   True;  
          NumP   :=   25;  
          CurPage   :=   1;  
          dslog.Active   :=   False;  
          dslog.CommandText   :=   'select   *   from   Logs   ';  
          dslog.Active   :=   True;  
          TotalNum   :=   dslog.RecordCount;  
   
          PageNum   :=   TotalNum   div   NumP;  
          if   (TotalNum   /   Nump)   <>   0   then   PageNum   :=   PageNum   +   1;  
          TbPre.Enabled   :=   False;  
          if   PageNum<2   then   TbNext.Enabled   :=   False;  
          StatuRefresh;  
          dslog.Active   :=   False;  
          dslog.CommandText   :=   'select   top   '   +   inttostr(NumP)   +   '   *   from   Logs   order   by   logid';  
          dslog.Active   :=   True;

posted @ 2008-12-11 10:10 delphi2007 阅读(189) | 评论 (0)编辑 收藏

adoquery 对SQL怎样绑定参数?? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222162013160.html
例如;在   ADOQuery   的SQL   语句中'SELECT   *   FROM   TABLE1   WHERE   '   WHERE   后面的值如果是个参数怎么办?如果这个参数是整数,又办??

一般偶都是使用Format函数来格式化Sql的  
  AdoQuery.Sql.Text:=Format('中'SELECT   *   FROM   TABLE1   WHERE   field1=''%s''   and   field2=%d',['aa',12]);  
   
  %s,   %d   的意思可以参考Format的帮助

ADOQuery.SQL.Text   :=   'SELECT   *   FROM   TABLE1   WHERE   AField   =   :AField   '  
   
  ADOQuery.Parameters.ParamByName('AField').Value   :=   xxxxxx;

Where   FieldName   =   :MyParam;  
   
   
  运行时  
  DataSet.ParamByName('MyParam')   :=   1;  
  DataSet.Open;  
   
  这样的问题,应该找书快些,不会LZ没Delphi   书?只是临时搞下Delphi?

谢谢,我用了":变量"的方法,但是好象不行,没有任何反映.我是初学DELPHI    
  用ADOQuery.params.parambyname()行吗??我不太会用这个,还请多帮帮忙!!谢谢!!

居然多了个“中”字,重新回帖  
   
  一般偶都是使用Format函数来格式化Sql的  
  AdoQuery.Sql.Text:=Format('SELECT   *   FROM   TABLE1   WHERE   field1=''%s''   and   field2=%d',['aa',12]);  
   
  %s   指参数是字符串,   %d   指参数是Integer;   其他参数可以参考Format的帮助  
 

posted @ 2008-12-11 10:10 delphi2007 阅读(438) | 评论 (0)编辑 收藏

我都要疯了,三层,客户端clientdataset+dbgrid, 在编辑dbgrid时,修改记录后,老出现:“Trying to modify read-only field” Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222154437161.html
我都要疯了,三层,客户端clientdataset+dbgrid,   在编辑dbgrid时,修改记录后,不能上下移动,老出现:“Trying   to   modify   read-only   field”  
   
  我知道它的意思,可我发现我从中间层取过来的数据有的字段就是只读,   在客户端修改也不行!  
   
  到底是为啥?

别疯了,是不是你数据库里的字段设置为只读?

1。中间层使用视图,在客户端一般是不可以编辑的。  
  2。中间层使用Union语句,在客户端一般也是不可以编辑的。  
  3。中间层使用计算字段(如Price*Count   as   Total),则Total这个字段是不能编辑的。  
  4。其他的情况。

用ADO连接的话,比如:select   *,a=0   from   xxx   象a字段是不能修改的,如果用BDE连接a就可以修改.再看看datasetprovider中是不是设置了只读.

1:检查一下你的数据集控件是否设置了只读(中间层的TDATASET、TDataSetProvider)、及客户端的TClientDataSet控件  
   
  2:检查一下你是否创建了永久性字段,并进行了设置  
   
  3:如果以上两点都正确,请像楼上的几位所提,检查你的数据集来源是否是从单一的数据表,如果不是   或者使用了视图、存储过程等,请将select   ...   from   ...   语句改为:   select   top   100   percent   ....   from   ....   格式   (top   100   percent   在SQL   SERVER中能将你的数据集变为一个可写的数据包)

4:如果试过以上方法还不行的话,可使用下面的这个函数,它会将TClientDataSet中的所有数据字段转为可读写的:  
   
  调用方式为:SetDstAllFieldCanEdit(ClientDataSetName);  
  写在ClientDataSet打开之后即可  
   
  procedure   SetDstAllFieldCanEdit(dstNm:   TClientDataSet;   AddFields:   string='');  
  var   tmpDst:   TClientDataSet;  
          I:   Integer;  
  begin  
      tmpDst   :=   TClientDataSet.Create(nil);  
      Try  
          dstNm.DisableControls;  
          tmpDst.Data   :=   dstNm.Data;  
          dstNm.Close;  
          dstNm.FieldDefs.Clear;  
          for   I   :=   0   to   tmpDst.FieldDefs.Count   -   1   do  
          begin  
              with   dstNm.FieldDefs.AddFieldDef   do  
              begin  
                  DataType   :=   tmpDst.FieldDefs[I].DataType;  
                  Size   :=   tmpDst.FieldDefs[I].Size;  
                  Name   :=   tmpDst.FieldDefs[I].Name;  
              end;  
          end;  
  //         CreateAttachColumns(dstNm,AddFields);  
          dstNm.CreateDataSet;  
          with   tmpDst   do  
          begin  
              First;  
              while   not   Eof   do  
              begin  
                  dstNm.Append;  
                  for   I   :=   0   to   Fields.Count   -   1   do  
                      dstNm.Fields[I].Value   :=   Fields[I].Value;  
                  Next;  
              end;  
          end;  
          if   dstNm.State   in   [dsInsert,dsEdit]   then   dstNm.Post;  
          dstNm.MergeChangeLog;  
      Finally  
          dstNm.EnableControls;  
          tmpDst.Free;  
      End;  
  end;

谢谢大家,结帖!

posted @ 2008-12-11 10:09 delphi2007 阅读(1951) | 评论 (0)编辑 收藏

这个代码应该怎么写??? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222151309162.html
我用DELPHI和SQL   SEVER做了一个系统,现在一个窗口做了一个  
  帮助按键,我想点它就能打开一个名为help.txt的使用帮助文档,代码要怎么写?  
  麻烦高手指教     (是不是begin和end中间要加什么代码?)  
  procedure   Tmainform.N11Click(Sender:   TObject);  
  begin  
   
  end;

shelllexecute

这个是什么?高手能写具体点吗?

uses   shellapi;  
   
   
  ShellExecute(self.Handle,   'Open',   'C:\aa.txt',   Nil,   Nil,   SW_SHOWNORMAL);

我加了  
  uses   shellapi;  
   
   
  ShellExecute(self.Handle,   'Open',   'C:\help.txt',   Nil,   Nil,   SW_SHOWNORMAL);  
   
   
  这样会报错啊  
  [Error]   Unit3.pas(245):   Statement   expected   but   'USES'   found  
  [Error]   Unit3.pas(246):   Undeclared   identifier:   'ShellExecute'  
  [Fatal   Error]   Project1.dpr(26):   Could   not   compile   used   unit   'Unit3.pas'  
   
 

没见到更。。。  
   
  implementation  
   
  uses   shellapi;  
   
  {$R   *.dfm}  
   
  procedure   Tmainform.N11Click(Sender:   TObject);  
  begin  
      ShellExecute(self.Handle,   'Open',   'C:\aa.txt',   Nil,   Nil,   SW_SHOWNORMAL);  
  end;  
 

posted @ 2008-12-11 10:09 delphi2007 阅读(124) | 评论 (0)编辑 收藏

如果记录数据库表修改记录 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222142245163.html
我想记录每个用户对每个表的修改都能记录到一个系统表里,请问应该如何实现呢?  
  最好可以记录到字段级的修改,对每次修改都记录初值及修改后的值。  
   
  我朋友说可以用触发器,但我感觉也不太对,因为触发器并不知道当前操作的用户,我还要记录当前修改是哪个用户  
   
  请兄弟们帮我看一下。谢谢啦。

你可以考虑在表中增加一个字段表示记录的当前状态;例如0表示正常可用;1表示被修改过,2表示被删除;另加一个字段表示操作人员;  
  这样在对表进行更新时不实际操作原记录,而是修改状态字段的值;而同时在表中新增一条记录

当然,新增的记录状态值为0;

db控件post   之前有oldvalue   和newvalue,你可以试试

比如那个的是。我为了简化事务处理把提交事务写在了一个函数里。  
  function   TdmClient.commitUpdate(ADOCon:TADOConnection;DataSet:TCustomADODataSet):   Integer;  
      var   DataSetOld,DataSetNew:TCustomADODataSet;  
  begin  
      Result   :=   1;  
      try  
          DataSet.Connection   :=   nil;  
          ADOCon.Close;  
          ADOCon.Open;  
          DataSet.Connection   :=   adocon;  
          ADOCon.BeginTrans;  
          DataSet.UpdateBatch;  
          ADOCon.CommitTrans;  
      except  
          ADOCon.RollbackTrans;  
          Result   :=   0;  
      end;  
  end;  
  我还有一个想法就是在调用这个函数里,把旧的数据集从数据库中取出来然后进行更新,  
  然后把两个DataSet进行比较,检查出修改和删除或新增的记录,期待楼下朋友的帮助。

posted @ 2008-12-11 10:09 delphi2007 阅读(348) | 评论 (0)编辑 收藏

fast report 如何在程序运行时进入报表的设计状态? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222115338164.html
fast   report   如何在程序运行时进入报表的设计状态?  
   
  frDesigner1?

是,加这个控件,frReport属性中为true

farce(鑫淼森焱垚)    
   
  哪个属性啊?  
 

两个控件放好(frxreport,frxDesigner)  
  1、按钮事件:  
      frxReport1.DesignReport;  
   
  2、frxReport1.PreviewOptions.Buttons.pbEdit为true,这个可以在显示报表时edit可以使用

fastreport控件.DesignReport   就可以了

posted @ 2008-12-11 10:09 delphi2007 阅读(531) | 评论 (0)编辑 收藏

delphi中用ado连接Sybase驱动是Sybase.ASEOLEDBProvider.2 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222113746165.html
在自己电脑上操作没有任何问题,把程序拷贝到装有sybase的电脑上,adoconnection可以连接上,但在adoquery执行查询的时候没有任何反应

补充下,刚才我在adoquery.Open就程序就停住的那台电脑上装了个delphi,编译状态下新加了个adoconnection连接的本地的sybase,新加了个adoquery连接adoconnection,并在属性sql中写了个简单的select语句,选择active为true后,也一直死在那里的。

听你的描述应该是连不上服务器,可以ping通吗

adoconnection都可以连通阿,就是adoquery执行查询的时候死在那里了

用AdoTable看看连接是不是正常

AdoTable一样有问题的,刚才在自己电脑上特意装了一下sybase的odbc,oledb,ado.net驱动,竟然本地也出现这种情况了

不会是重了病毒了吧?

好几台都这样啊,adoconnection连接串是这样的  
  Provider=Sybase.ASEOLEDBProvider.2;User   ID=sa;Persist   Security   Info=False;Server   Name=192.168.0.33  
   
  然后给defaultDatabase附数据库名

1.升级你的ADO试试(MDAC2.8)  
  2.ADO对非microsoft数据库支持不是很好,有许多问题,建议改用其它引擎(如ODBC/BDE/DBExpress)  
 

现在我该成了odbc连接时可以的,但是其中一张表有400多万条,以后数目还要增加,用原先的着这种连接方式查询查询其中大概20条左右的数据速度比较快,建了索引后1s不到,但该成odbc连接后相同数据竟然要2m左右

晕,不能使用事务?提示:事务无法启用,因为不止一个odbc连接正在使用

一个adoquery.Open之后可以启动事务,当在2个adoquery.Open之后就提示事务无法启动,因为不止一个odbc连接在使用

posted @ 2008-12-11 10:09 delphi2007 阅读(1431) | 评论 (0)编辑 收藏

从SQL数据库中读取文件出错,急,在线等? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222113003166.html
各位大侠:  
                我已经在SQL数据库中有一个字段存放了EXCEL文件,为Image类型,现在通过存储过程取得数据,但想打开取出的EXCEL文件时出错,我的代码如下:  
    var  
          Estream:TadoBlobStream;  
   
          ClientDataSet1.close;  
          ClientDataSet1.command:='Exec   存储过程名   ';  
          ClientDataSet1.open;  
     
          Estream:=TadoBlobStream.Create((ClientDataSet1.FieldByName('t_excel')       as   TBlobField),bmRead);  
          Estream.SaveToFile('c:\123.xls');  
          Estream.free;  
   
        但是运行时出错:'Invalid   class   typecast'  
   
        请各位帮忙!谢谢!  
         
           
   
   
   
 

用十六进制编辑器对比一下文件装入前后的文件头是不是一样。  
  然后找原因。

给你一份资料,也许有用。  
  SQL   Server和Delphi中有一个讨厌的地方就是,存储任意二进制文件的时候,比较烦人,例如把一个Word文件(25KB)保存到SQL   Server中,但是等你重新提出保存成另外的文件的时候,可能生成的文件大小只有24.7KB左右大小了!这样Word就不能打开重新生成的文件!  
   
  要解决这个问题,要做几个修改:  
  首先,你必须修改SQL   Server中用来保存任意文件的字段的类型为Image(不要用Text/nText字段,更加不要用Binary/VarBinary字段,因为binary字段最多只能存储8K的数据)数据类型,然后,你在Word里面添加字段的时候,Delphi会默认字段类型为ftMemo,你必须把这个字段改成ftBlob字段!以后你就可以通过  
  Table1FileField.LoadFromFile()/SaveToFile()来读取任意的二进制文件了!而且不会丢失任何字节!也不会多出什么东西来!这是Kingron的经验之谈。

不用Stream,直接保存到数据库和读出后保存到文件吧  
  保存:  
          TBlobField(cdsERFiles.FieldByName('FileContent')).LoadFromFile(OpenDialog.FileName);  
   
  读出:  
          TBlobField(cdsERFiles.FieldByName('FileContent')).SaveToFile(sFileName);  
 

问题已经解决,谢谢各位!结贴,给分

posted @ 2008-12-11 10:09 delphi2007 阅读(380) | 评论 (0)编辑 收藏

用SQL排名次的问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222112436167.html
在制作一个货物销量排名报表时,我用一名SQL语句联合查询出了货物ID及对应的销售总量:  
  SQL.text:='select   货物ID,sum(销量)   as   销量   from   销售表   group   by   货物ID   order   by   sum(销量)   desc'  
  现在我想在查询结果中加一个名次字段,显示排名,请教各位这句SQL该如何写

SQL.text:='select   '+   quotedstr('排名值')   +   '   as   排名,货物ID,sum(销量)   as   销量   from   销售表   group   by   货物ID   order   by   sum(销量)   desc'  
  这样会显示排名字段,而且值全部是“排名值”

大哥,这样的话,排名字段显示的内容全都是字符“排名值”,有什么意思呢,我是想让排名的值从1、2、3依次递增

哈,这问题太难了吧,怎么没人回答?

没感觉很难,一个相关子查询就能搞定,可能是大家都写累了吧!  
  我帮你写一个!  
  保留名次:  
  Select   *,  
              Rank=(select   count(distinct(销量))   from   table1   where   销量>=A.销量)  
  From   table1   A  
  不保留名次:  
  select   *,  
              rank=(select   count(1)   from   table1   where   销量>A.销量)+1  
  from   table1   A

谢谢楼上的大哥,可惜我看不懂,能不能解释一下?

我帮忙解释一下,用保留名次语句会显示如下:  
  1  
  2  
  2  
  2  
  3  
  4(记录数一共为6条)  
  用不保留名次显示如下:  
  1  
  2  
  2  
  2  
  5  
  6(记录数一共为6条)  
  其中销量表示排序字段,用子查询来获得大于该销量的记录数(就是排名了)。

谢谢笑青天和绿色落叶,我主要是对以上语法不懂,查了一下SQL中文参考手册,搜索rank,竟找不到一条,在网上查找后,才知是某数据库服务器特有的东西,可我用的是access呀,再请二位老师指教。

posted @ 2008-12-11 10:09 delphi2007 阅读(185) | 评论 (0)编辑 收藏

如何禁止访问局域网,但SQL能访问? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222112257168.html
同局域网内,如何禁止客户机访问局域网,但是自己写的程序能访问SQL?  
  另外,如果客户机的策略(gpedit.msc)中GUEST禁止以及用户中的GUEST关闭,在不打开情况如何才能访问SQL?

自己顶一下

策略中好像可以指定一些可以访问的命名管首,加入SQLServer管道名吧

端口直接过滤了

把两台机子设为不同的网段,可以限制一定形式的“访问”

我的意思是,在服务器上设置客户机不能访问任何局域网内的机器,但可以访问服务器的SQL数据库,这个怎么处理?需要做一个服务器的代理程序吗?

to   lihuasoft(学习低调做人)  
  查了一些资料,设置成不同网段需要路由器,另外,不同网段间如果访问SQL数据库(即只访问SQL数据库)?

端口过滤!类似防火墙的原理

简单.两个方案:  
  1.假设你的服务器是域控服务器,那么任何机器都要登录你的服务器,你就在服务器上做个文件,该文件可以自动在客户机登录的同时加载到客户机中.使客户机全部统一按你的设置进行配置.你只需要在做该文件的时候将客户禁止他们修改你的网络设置,然后关闭所有端口,就留一个1433端口就行了.因为TCP/IP协议访问SQL只需要一个1433端口就可以了;  
  2.假设你嫌复杂,那么你可以将所有计算机的管理员权限给拿掉,然后将其它用户做成非管理,使得他们不能修改你的网络设置.然后自己手工到每台工作站上用管理员登陆.在网络连接属性中的本地连接中将所有协议删除,就留一个TCP/IP协议,然后在该协议的高级选项--选项页面中可以找到"TCP/IP筛选",点它,再点属性.勾上"起用TCP/IP筛选(所有适配齐)",然后选择TCP/IP端口"只允许"点添加,输入1433点确定.然后一路确定所有窗口.最后重新启动就成了.  
  但是先决条件是你的SQL必须是在装的时候就设好了,所有客户可以通过1433访问,而没有被修改过.

使用windows的安全机制,可以指定系统安全策略,开放mssql的端口

客户机关闭端口  
  TCP   139  
  TCP   445  
  UDP   137  
  UDP   138  
   
   
  与网卡绑定的服务中取消  
  Microsoft   网络客户端  
  Microsoft   网络的文件和打印机共享  
  只保留TCP/IP协议

只保留TCP/IP协议  
  只开1433/1434端口(貌似1434也可以关,不确认)

Don't   expose   your   database   server.   expose   your   application   server   (web   service)   or   your   web   server   (web   site)

学习了,cowboy_tt()   可以参考一下

用防火墙,只开放1433端口

楼上的方法好.

好解决么。装个防火墙,就开通1433端口好了。

方法是有的   GUSET可以开着    
  然后使用本地安全策略关闭TCP   UDP   135、139  
  只开放1433端口   或自己设置的SQL端口!  
  设置好后   给没个客户端导入策略!即可  
 

在程序里实现不非常不现实的,因为windows端口很多。你不可能都屏蔽了。还是用防火墙比较合适,但也不能完全做到你的想法。

posted @ 2008-12-11 10:09 delphi2007 阅读(194) | 评论 (0)编辑 收藏

急!keypress 问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222105416169.html
if   (Key   <#48)or   ((Key   >#57)and   (Key   <#65))or   ((Key   >#90)and   (Key   <#97))   or   (Key   >#122)   then  
                Key   :=#0  
   
  不能输入汉字,该怎麽改?我要求只能输入字母,数字,汉字。  
  本人不清楚   key   值,请赐教。

procedure   TForm1.Edit1KeyPress(Sender:   TObject;   var   Key:   Char);  
  begin  
      if   not   ((Key   <   #32)   or   (Key   in   ['0'..'9',   'a'..'z',   'A'..'Z'])   or   (Key   >   #127))   then  
          Key   :=   #0;  
  end;  
 

posted @ 2008-12-11 10:09 delphi2007 阅读(377) | 评论 (0)编辑 收藏

我要疯了,为什么不对啊?高手帮我看看啊。。。。数据库的统计 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222101647170.html
Str   :='Select   Sum(总价)   as   Sum1   From   zhangmu_info';  
      ADOQuery1.Close;  
      ADOQuery1.SQL.Clear;  
      ADOQuery1.SQL.Add(Str);  
      ADOQuery1.Open;  
      Edit7.Text   :=ADOQuery1.Fieldbyname('Sum1').AsString;  
   
   
  这个是代码   ,为什么总是提示说我备注不能Found   备注是我表中的一个字段名。  
  还有,我的备注字段是可以为空的,是不是和这个也有关系啊?  
   
 

这个语句应该试没有问题啦。  
  我看看数据集ADOQuery1的字段呢,双击该组件,是不是有一个字段是“备注”,如果有的话,就是问题啦。当你执行上面这个语句时,在SELECT中没有备注字段,当然就会报错了。

应该是ADOQUERY1控件里面加了备注,或是与adoquery1连接的grid或dbedit控件绑定了它的字段

把ADOQuery1删除了,再重新放上一个,设置数据连接属性,重新来

双击adoquery,清除所有的fields  
  然后再运行  
   
  也有可能是你form里的其他感应控件   指向了'备注',而你执行完这个后adoqeury1并没有返回'备注'

看看是不是有控件绑定了ADOQUERY1中的字段,而你现在的结果集中却没有的

好像是那么回事啊,我换了个ADOQuery就可以了,呵呵,谢谢楼上的所有啊,还有,我怎么发分啊?  
  我是个新手,呵呵。。。告诉我啊。。。。谢谢!

点帖子上面的管理,就可以放分了

好的,谢谢楼上的昂。。。

posted @ 2008-12-11 10:09 delphi2007 阅读(88) | 评论 (0)编辑 收藏

字段下的值不固定的查询 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222093859171.html
我有一个这样的表    
  标号     层号       数值       hs  
  1           A             0.2         ch  
  2           B             0.3         cb  
                                          cn  
                                          ch  
                                          cf  
                                          cn  
  我想实现这样一个查询语句,查询后的结果如下表  
  标号     层号             hs  
  1           A                   ch  
                                  ch  
  2           B                   cb  
                                  cn  
                                  cn  
                                  cf  
  就是把   hs中有相同值的写到一起(空值的不要),但这个字段下的值有可能还只有一个值,所以只要把   这一个值查询出来就行了   也就是这个字段下的值是不固定的  
   
  我应如何实现这条查询语句,是不是应该把hs字段的值写到某个文件中  
  然后在查询   比较啊!  
   
                             
                             
                           
 

select   标号,     层号,           hs  
  from   表    
  order   by   hs,   层号,   标号

select   标号,     层号,           hs  
  from   表    
  where   hs   is   not   null  
  order   by   hs,   层号,   标号  
 

group   by    
  分组问题  
   
 

select   *  
  from   表    
  where   hs   is   not   null  
  order   by   层号,   标号  
  group   by   hs  
   
 

为什么这样查询出来的只是一条啊   !!!!  
  空值的也会查询出来啊  
  如果hs   只有一个值cn    
  hs  
  cn  
  cn  
  cn  
  空值  
  cn  
  查询出来的就是下面这样了  
  hs  
  cn  
  空值  
   
   
 

select   *  
  from   a   where   hs   is   not   null  
  order   by   hs  
 

象上面那样是满足了但  
  这样把hs   为空值的也   查询出来了啊    
  不要空值啊!!!where   hs   is   not   null   这里已经限制了怎么会这样   啊

where   hs   is   not   null   and   hs<>''

怎么会呢,我亲自试的,是不是你什么地方弄错了  
 

where   hs   is   not   null   and   hs<>''  
  这样写会出错的!  
  !  
  007     我就是象你给我的那样写  
  select   *  
  from   a   where   hs   is   not   null  
  order   by   hs  
  我在看看  
 

where     hs     is     not     null     and     hs     <     >''''    
  写成这样就好了   !!!  
   
  可以了  
  谢谢俩位了   啊  
     
 

好了   给你们分了  
  谢谢

posted @ 2008-12-11 10:09 delphi2007 阅读(121) | 评论 (0)编辑 收藏

我是新人 程序上面有个问题 范例实在找不到 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222092439172.html
我建了两张表   互相之间用DATE来关联  
  第一张是简介表   第二张是详细表  
  然后我在FORM1中浏览简介表   现在想加个详细按钮   一点就可以在新窗口中浏览相对应的详细表   不知道该怎么做   找了很多范例   也没有找到   请各位高手帮帮忙!!

在点详细按钮时取简介表的DATE值,然后根据这个DATE值去详细表中查询就可以了

Detail的query的DataSource属性指向Master   Query,  
  然后在SQL中通过参数来指定连接字段。  
 

谢谢     谢谢     知道了

posted @ 2008-12-11 10:09 delphi2007 阅读(91) | 评论 (0)编辑 收藏

如何将数据库表中前几条记录合并显示 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222055338173.html
有一个数据库表有4个字段,第一个字段是ID,第二、三、四都是字符字段如:  
  ID     str1       str2     str3    
  1         Z             L             M  
  2         L             M             N  
  3         L             M             N  
  4         L             M             N  
            .....  
  我在程序中显示的时候,准备加一个字段,这样来进行显示  
  ID     str1         str2     str3       addstr  
  1         Z             L             M  
  2         L             M             N  
  3         L             M             N  
  4         L             M             N  
  5         N             N             L             ZLMLMNLMNLMNNNL  
  6         L             N             O             LMNLMNLMNNNLLNO  
        .....  
  也就是说,新添加的字段的内容就是前5条(包括自己本身的那条)记录1,2,3字段的合并显示,各位大侠想个招。。。。

10~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~分?!

不懂行情,一般这样的问题该多少分?

if   exists(select   1   from   sysobjects   where   id   =   object_id(N'testTable'))  
  drop   table   testTable    
   
  create   table   testTable    
  (id   int   primary   key   identity(1,1),  
  str1   varchar(1),  
  str2   varchar(1),  
  str3   varchar(1),  
  addstr   varchar(100)  
  )  
   
  insert   into   testTable   values('Z','L','M','')  
  insert   into   testTable   values('L','M','N','')  
  insert   into   testTable   values('L','M','N','')  
  insert   into   testTable   values('L','M','N','')  
  insert   into   testTable   values('L','M','N','')  
  insert   into   testTable   values('L','M','N','')  
  insert   into   testTable   values('L','M','N','')  
  insert   into   testTable   values('L','M','N','')  
  insert   into   testTable   values('L','M','T','')  
  go  
   
   
  alter   procedure   mytestProcedure  
  @FCurrentid   int  
  as  
   
  declare  
      @FieldStr   varchar(100),  
      @MaxId   int,  
      @CurrentID   int  
   
  set   @Fieldstr   =   ''  
  set   @CurrentID   =   @FCurrentid   +   1  
  select   @Maxid   =   max(id)   from   testtable  
     
  select   @FieldStr   =     @FieldStr   +   str1   +str2   +str3   from   testtable   where   id   <=   @FCurrentid  
   
  update   testtable   set   addstr   =   @FieldStr   where   id   =   @FCurrentid  
   
   
  while   @CurrentID   <   @MaxID   +1  
  begin  
      select   @FieldStr   =   right(@FieldStr,len(@FieldStr)-3*len(str1))   +   str1+str2+str3   from   testtable   where   id   =   @CurrentID  
      update   testtable   set   addstr   =   @FieldStr   where   id   =   @CurrentID  
     
      set   @CurrentID   =   @CurrentID   +   1  
  end  
  go  
   
  go  
   
  exec   mytestprocedure   5  
   
  select   *   from   testtable  
 

执行结果  
  ------------------  
  1 Z L M  
  2 L M N  
  3 L M N  
  4 L M N  
  5 L M N ZLMLMNLMNLMNLMN  
  6 L M N LMNLMNLMNLMNLMN  
  7 L M N LMNLMNLMNLMNLMN  
  8 L M N LMNLMNLMNLMNLMN  
  9 L M T LMNLMNLMNLMNLMT  
 

中间的while循环也可以使用游标实现,但效果都差不多,  
  应该还有更简单的方式可以一句话搞定,但我暂时没想到。

up

下面这种解决方式,代码可能更少些,也更容易懂些,但是,其内部执行的循环次数好像也更多些。  
  if   exists(select   1   from   sysobjects   where   id   =   object_id(N'testTable'))  
  drop   table   testTable    
   
  create   table   testTable    
  (id   int   primary   key   identity(1,1),  
  str1   varchar(1),  
  str2   varchar(1),  
  str3   varchar(1),  
  addstr   varchar(100)  
  )  
   
  insert   into   testTable   values('Z','L','M','')  
  insert   into   testTable   values('L','M','N','')  
  insert   into   testTable   values('L','M','N','')  
  insert   into   testTable   values('L','M','N','')  
  insert   into   testTable   values('L','M','N','')  
  insert   into   testTable   values('L','M','N','')  
  insert   into   testTable   values('L','M','N','')  
  insert   into   testTable   values('L','M','N','')  
  insert   into   testTable   values('L','M','T','')  
  go  
   
  if   exists(select   1   from   sysobjects   where   id   =   object_id(N'myfunction'))  
  drop   function   myfunction    
  go  
   
  --自定义函数,根据传递的创始化id(就是从第几行开始),和当前id来返回一个当前id前面几行的一个字符串;  
  create   function   myfunction   (@FinitID   int,@FCurrID   int)  
  returns   varchar(100)  
  as  
  begin  
  declare  
      @FieldStr   varchar(100)  
   
  set   @Fieldstr   =   ''  
     
  select   @FieldStr   =     @FieldStr   +   str1   +str2   +str3    
  from   testtable    
  where   id   between   (@FCurrID   -   @FinitID   +1)   and   @FCurrID  
   
  return(@FieldStr)    
   
  end  
   
  go  
  update   testtable   set   addstr   =   test.dbo.myfunction(5,id)   from   testtable   where   id   >4  
  select   *   from   testtable

CREATE   FUNCTION     AddColumn   (@ID   INT)      
  RETURNS   NVARCHAR(4000)   AS      
  BEGIN    
  Declare   @SQL   NVARCHAR(4000)  
  Declare   @ROW   INT                
  Select   @SQL   =   ''  
  Select   @ROW   =   COUNT(1)     FROM   (Select   Top   5   *   from   TADD   Where   ID   <=   @ID   Order   By   ID   Desc)   T  
  IF   @ROW   =   5    
  Begin  
  Select   @SQL   =   @SQL   +   Str   From   (Select   Top   5   Str1+Str2+Str3   Str   from   (Select   Top   5   *   from   TADD   Where   ID   <=   @ID   Order   By   ID   Desc   )   T     Order   By   ID   )   TT  
  End  
  Return   @SQL    
  END  
   
  -----------------------------  
   
  Select   ID,   STR1,   STR2,   STR3,   DBO.AddAtr(ID)   ADDSTR   FROM   TADD

Select   ID,   STR1,   STR2,   STR3,   DBO.AddColumn(ID)   ADDSTR   FROM   TADD  
 

谢谢几位的解答,不过,这和我的目的还是有些差距,可能我没有说清楚,我是想数据库不动,在DELPHI的ADOTABLE中添加一个字段,在OnCalcFields事件中用什么方法能够将上面的目的达到!

 
      重写VCL

经过不断的实验,自己解决了,就是比较麻烦,不过还是谢谢大家了,给两位回答问题积极的帅哥送点分!!

将解决的办法说一下,TABLE表不动,添加一个计算字段,然后,做一个自定义函数,将ID传给函数,在函数中包含一个动态查询,做一个循环的查询将结果累计,然后返回给TABLE的oncalcfields过程中的计算字段的赋值。

posted @ 2008-12-11 10:09 delphi2007 阅读(333) | 评论 (0)编辑 收藏

求ReportMachine的OCX教程 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061221204020174.html
不知哪位大虾有呢  
  偶的E-mail是PackPB@126.com

这个企业版才有的,你可以用他的个人版自己封装一个,不难!

谢谢楼上的朋友,不过最近RM的网站挂了  
  偶这边是要把RM用到PB过去的  
  本人对Delphi不熟  
  还请大虾多多指教

posted @ 2008-12-11 10:09 delphi2007 阅读(687) | 评论 (0)编辑 收藏

动态创建数据源问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061221193009175.html
下面代码是动态创建odbc数据源代码,请问要把下面代码加在那个地方才不会出错,  
  我加在工程文件里也出错,加在单元文件里也出错,  
  function   getwinsyspath:string;  
  var  
  buf:array[0..255]of   char;  
  begin  
  getsystemdirectory(buf,sizeof(buf));  
  result:=strpas(buf);  
  if(result<>'')and(result[length(result)]<>'\')   then  
  result:=result+'\';  
  end;  
  function   createmdbodbc(aodbcname,amdbname:string):boolean;  
  var  
  thereg:tregistry;  
  begin  
      thereg:=tregistry.create;  
      with   thereg   do  
      begin  
          rootkey:=hkey_current_user;  
          if   openkey('software\odbc\odbc.ini\odbc   data   sources',true)   then  
          writestring(aodbcname,'microsoft   access   driver(*.mdb)')  
          else  
          begin  
                closekey;  
                free;  
                result:=false;  
                exit;  
          end;  
   
  closekey;  
  if   openkey('software\odbc\odbc.ini\'+aodbcname,true)   then  
  begin  
      writestring('dbq',amdbname);  
  writestring('driver',getwinsyspath+'odbcjt32.dll');  
  writestring('driverID',25);  
  writestring('fil','ms   access');  
  writestring('safetransactions',0);  
  writestring('uid','');  
   
  end   else   begin  
      closekey;  
  free;  
  result:=false;  
  exit;  
  end;  
   
   
  closekey;  
  if   openkey('software\odbc\odbc.ini\'+aodbcname+'\engines\jet',true)   then  
  begin  
      writestring('implicitcommitsyne','');  
  writestring('maxbuffersize',2048);  
  writestring('pagetimeout',5);  
  writestring('threads',3);  
  writestring('usercommitsync','yes');  
   
   
  end   else   begin  
      closekey;  
  free;  
  result:=false;  
  exit;  
  end;  
  closekey;  
  free;  
  result:=true;  
  end;  
  end;  
   
   
 

报什么错?看看是否少引用Registry单元之类...

posted @ 2008-12-11 10:09 delphi2007 阅读(121) | 评论 (0)编辑 收藏

请问dbexpress怎样连接access数据库? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061221190556176.html
请问dbexpress怎样连接access数据库?

需要下载  
  dbExpress   driver   for   Access

posted @ 2008-12-11 10:09 delphi2007 阅读(299) | 评论 (0)编辑 收藏

Delphi 如何通过配置ini文件去连接SQL Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061221172852177.html
请问大家   Delphi如何通过配置ini文件去连接SQL?  
  大家有没相应的例子或代码?  
  由于是第一次接触这方面的操作,所以希望大家帮个忙.

这个首先有一个配置好的INI文件,然后在连接数据库之前读出INI文件的配置信息来连接SQL就可以了

首先你要会对INI进行处理,INI文件读写DELPHI中有一个类TIniFile,利用这个类型你就可以方便地创建及读写INI文件了.

////ini  
  [ServerInfo]  
  ServerIP=.  
  SQLDBName=aaaa  
  SQLUserID=sa  
  SQLPwd=sa  
   
   
  /////////////  
  var  
          FileName:string;  
      begin  
   
          FileName:=ExtractFilePath(   application.ExeName)+'resource\conf.ini';  
          with   TInifile.Create(Filename)   do  
          begin  
              ServerIP:=ReadString('ServerInfo','ServerIP','');  
              SQLDBName:=ReadString('ServerInfo','SQLDBName','');  
              SQLUserName:=ReadString('ServerInfo','SQLUserID','');  
              SQLPwd:=ReadString('ServerInfo','SQLPwd','');  
              Destroy;  
          end;  
   
   
   
   
  ///////////  
   
  ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Password='+  
          SQLPwd+  
          ';Persist   Security   Info=True;'+  
          'User   ID='+  
          SQLUserName+  
          ';Initial   Catalog='+  
          SQLDBName+  
          ';Data   Source='+  
          ServerIP;  
 

三楼的基本差不多了,不过,密码最好进行加密!这种多的是,你可以随便找的。

谢谢大家的帮忙!

三楼正解

密码要进行加密.

我找了一些关于密码加密的例子,看后总觉得有些模糊,  
  请问朋友们,可不可以给些相应的详细些的例子给我看看啊?  
  毕竟头一次接触这样的例子,还是不太明白.

三楼的ADOConnection1.ConnectionString   的这个是怎么配置的啊,我在编译的时候老是说这里错误,未定义

配置的问题搞定了,谢谢大家!  
   
  但关于加密的问题还是希望大家能给我指导一下.  
  我是这样想的:   先定义两个字符串key和str   作为明钥和密钥.str是key倒过来的对应的字符串.  
  关于对应的加密,解密代码怎么写啊?我想了这么久,还是没弄会.  
  加密后再如何应用到三楼的代码中去啊,希望大家指点一下,我实在弄不好了.  
 

[039D2D4968B58091]  
  6294E987F260513A=93F7BB025CD2ECE209FB77C6868074E3  
  16CC3532BB7A98DF=198E4BB5584F94BF  
  E7EBACCB860DAAFE=198E4BB5584F94BF  
  13AE07A60EF35373=0AB3345601A7728A  
   
  这是我的配置

[039D2D4968B58091]                
  6294E987F260513A=93F7BB025CD2ECE209FB77C6868074E3       //服务器  
  16CC3532BB7A98DF=198E4BB5584F94BF                                       //数据库名  
  E7EBACCB860DAAFE=198E4BB5584F94BF                                       //用户  
  13AE07A60EF35373=0AB3345601A7728A                                       //密码

可不可以给个具体的例子或算法给我啊

加密你可一左移右移什么的来实现,加密算法用别人的你放心么?????

我是用来参考啊,我现在是不知道如何着手

 
  //db_con.ini       这是你的配置文件  
  [ServerInfo]  
  ServerIP=.  
  SQLDBName=aaaa  
  SQLUserID=sa  
  SQLPwd=sa  
   
   
   
   
  //这是你的数据库连接单元文件中有关数据库连接函数  
      function   Get_Db_Con_Str(FileName:String):String;  
      var  
          ServerIP,SQLDBName,SQLUserName,SQLPwd:string;  
      begin  
          Result   :=   '';  
          with   TInifile.Create(Filename)   do  
          begin  
              try  
                  ServerIP:=ReadString('ServerInfo','ServerIP','');  
                  SQLDBName:=ReadString('ServerInfo','SQLDBName','');  
                  SQLUserName:=ReadString('ServerInfo','SQLUserID','');  
                  SQLPwd:=ReadString('ServerInfo','SQLPwd','');  
              finally  
                  Free;  
              end;  
              Result   :=   'Provider=SQLOLEDB.1;Password='+SQLPwd+';Persist   Security   Info=True;User   ID='+SQLUserName+';Initial   Catalog='+SQLDBName+';Data   Source='+ServerIP;  
          end;  
   
   
  //使用  
    var  
        Ini_FileName:String;  
   
    //.....    
       
    Ini_FileName:=ExtractFilePath(   application.ExeName)+'db_con.ini';  
    if   not   FileExists(Ini_FileName)   then  
    begin  
        ShowMessage('数据库连接配置文件不存在!');  
        Application.Terimate;  
    end;        
    with   ADOConnection1   do  
        Connection   :=   False;  
        ConnectionString:=Get_Db_Con_Str(Ini_FileName);  
        try  
            Connection   :=   True;  
            //.....  
        except  
            ShowMessage('数据库连接失败!请检查配置文件:'+Ini_FileName);  
            //....  
        end;  
    end;  
 

给你一个简单的:  
  procedure   TFrmSrv.BtnSaveClick(Sender:   TObject);  
  var   I:integer;  
  begin  
      Pwd:=EdtPwd.Text;  
      for   I:=1   to   length(pwd)   do  
      begin  
      pwd[i]:=chr(ord(pwd[i])xor   4);  
      end;  
      myinifile:=Tinifile.Create(ExtractFilePath(paramstr(0))+'\setup.ini');  
      myinifile.writestring('Setup','Data_Source',EdtSrv.text);  
      myinifile.writestring('Setup','Initial_Catalog',EdtDB.text);  
      myinifile.writestring('Setup','User_ID',EdtUser.text);  
      myinifile.writestring('Setup','Password',Pwd);  
      myinifile.Free;  
      end;  
  end;

象上面的这样子保存和读取都是一样的,取的时候再进行一次就行了。ok?

哈,能直接用了

posted @ 2008-12-11 10:09 delphi2007 阅读(521) | 评论 (0)编辑 收藏

如何将任何文件类型数据保存到数据库中 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061221170418178.html
我是用socket写的三层结构,在客户端如何把文件保存到数据库中,数据类型为image,急切!!!!!!!!!

blob   Field?

google       TBlobField

谢谢各位我的问题已经解决了,来者有分,散分了。

BLOB字段.....

posted @ 2008-12-11 10:09 delphi2007 阅读(278) | 评论 (0)编辑 收藏

我不知道有没有人用DELPHI7+CORBA做数据库开发? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061221170258179.html
这几年以来一直用这种模式进行开发,做了不少系统。但是corba对于穿透代理和防火墙是无能为力,期待国外的ICE对DELPHI进行支持,也一直没有等到。这段时间的一个项目,迫使我必需解决这方面的问题。熬了几天,用SOCKET把visibroker的网络通讯给接管了,和visibroker已经没有任何关系了,执行效率很高,心情很好。这个分数献给不喜欢用网页方式开发系统,又喜欢使用多层结构的同行们!

没用过CORBA

我也想找这方面的资料

http://www.google.com/search?hl=zh-CN&newwindow=1&q=delphi+CORBA&btnG=Google+%E6%90%9C%E7%B4%A2&lr=

发错了

ICE的zeroc开发小组大概是有意回避BORLAND的BCB与DELPHI...所以楼主是不必等它们了.  
   
  前年我在BCB6与BCB2006编译ICE   FOR   C++源码,作了一些修改才编译完成.  
  后来试图编写ICE   FOR   DELPHI之类的东西,花了一些力气,但因精力有限,扔在一边了..  
   
   
   
 

能否将部分代码分享一下?

哈哈,好长时间没有来CSDN,还是有对CORBA感兴趣的朋友!大家可以多讨论,感兴趣的多,我可以把我的方法整理一下放上来。

CORBA?  
  没用过

结了,就这样吧!

posted @ 2008-12-11 10:09 delphi2007 阅读(226) | 评论 (0)编辑 收藏

500分求報表解決方案(fastreport或reportbuilder) Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061221165027180.html
用delphi如何實現如下報表  
   
  廠商:XXX       訂單日期:XXXX  
  &#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;&#717;  
  品名規格   訂單   庫存  單位  單價   金額  
  .......             ...             ....         ....       ....           .....  
  .......             ...             ....         ....       ....           .....  
   
  .......             ...             ...           ....       ....             ....  
  日期    名稱    數量  
  ......           .....             ....  
  ......           .....             .....  
   
  ......           .....             .....  
   
  注:不管明細記錄有多少,都顯示5筆的格子

沒有人會?

有很多了,你可以Delphi自带的QReport就可以了.

delphi自带demo你可以看看...   可以解决你这问题

自己研究一下嘛~

这有什么难的啊.

据我所知有不下5中解决方法

誰給個解決方案?為啥都只會說,是不是不會啊?

用fastreport   试试  
   
  定单号等用主项数据,它数据源  
   
  下面用细项数据  
   
   
  大致步骤:  
  adoquery1   里sql---select   *   from   定单  
  adoquery2   datasource指向   adoquery1的datasource  
                  它   的sql---select   *   from   定单明细   where   定单号=:定单号  
   
  再在form里放   两个frdbdataset,分别指向上面的adoquery  
  打开fastreport后,拖主项数据,其数据源是   frdbdataset1(比如说)  
                                    拖细项数据,其数据源是   frdbdataset2  
   
  应该ok了  
  控制记录数,我想能通过   细项数据的脚本代码   来完成  
   
  ======呵呵,水平有限,难免出错

按上的试试啊  
  我只会用fastreport

posted @ 2008-12-11 10:09 delphi2007 阅读(303) | 评论 (0)编辑 收藏

500分求助,delphi里用standred来配置dbf文件 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061221164035181.html
配置的时候我选过了standred下的每一项,就是无法显示dbf文件的其中几个字段的内容,但是我用excle打开该dbf文件,都是可以的,里面的字段都是有内容的。是不是需要什么特殊的操作,还是要进行什么处理先!  
  请知情人指教,分数我会陆续送上。急啊

http://community.csdn.net/Expert/topic/5220/5220310.xml?temp=.6033747

谢谢这位朋友,dbf我知道是这么配的,也配成功了,但就是只能显示第一第二个字段,后面的字段的内容都是空的了!但事实上这些字段都是有值的,我用excle打开试过了。在帮我找找原因

posted @ 2008-12-11 10:08 delphi2007 阅读(107) | 评论 (0)编辑 收藏

在那里可以下载delphi组件方法的帮助文档呢? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061221160429182.html
在那里可以下载delphi组件方法的帮助文档呢?好像java那样子,有一个jdk   API帮助文档,我是刚学delphi的新手,就是对这些组件的方法不是很熟悉,多多指教.

标准的组件DELPHI自带的帮助上都有  
   
  非标准的第三方组件,就要看作者是否提供帮助.

posted @ 2008-12-11 10:08 delphi2007 阅读(223) | 评论 (0)编辑 收藏

请教高手:将数据表中的某字段的全部记录作为dbcombobox的选项???急盼!!! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061221154622183.html
数据表   WZMC  
    字段     WZMC    
    记录1:钢材  
    记录2:木材  
    记录3:煤炭  
    记录4:水泥  
  如何将字段WZMC的所有记录作为DBComboBOX   的选项??              
 

遍历表,插入DBComboBOX下拉列表

with   query1   do  
  begin  
      close;  
      sql.clear;  
      sql.add('select   WZMC   from   WZMC');  
      open;  
      first;  
      DBComboBOX1.items.clear;  
      while   not   eof   do  
      begin  
          DBComboBOX1.items.add(query1.fieldbyname('WZMC').asstring);  
          next;  
      end;  
   
  end;

谢谢!!我明白了.但是,一定要遍历表吗,在属性中设置行吗?

不行的,印象中好象用BDE可以,很久不用了,不能肯定。

那你要用DBlookupComboBOX

十分感谢!!我明白了!!

posted @ 2008-12-11 10:08 delphi2007 阅读(330) | 评论 (0)编辑 收藏

仅列出标题
共34页: First 16 17 18 19 20 21 22 23 24 Last