delphi2007 教程

delphi2007 教程

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

#

急!rvsystem中的问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061225174502108.html
请问怎么设置rvsystem中单元格的高度。  
  再问rvsystem中的settab和tab中的各个参数是什么意思!谢谢!
posted @ 2008-10-20 10:33 delphi2007 阅读(100) | 评论 (0)编辑 收藏

急!rvsystem中的问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061225171002109.html
请问怎么设置rvsystem中单元格的高度。  
  再问rvsystem中的settab和tab中的各个参数是什么意思!谢谢!
posted @ 2008-10-20 10:33 delphi2007 阅读(257) | 评论 (1)编辑 收藏

连接数据库的问题请教 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061225170249110.html
请问用DBE在本地建立一个连接服务器MSSQL的数据库连接,用TTABLE,TDBGRID,TDATASOURCE连接了一个表,该程序是否只能在本地运行?  
  我编译后生成的EXE文件放到另外一台电脑上就不能跑了。是否需要在每台电脑都这样设置?  
  DELPHI是否可以实现生成EXE后,不需要额外设置,把该EXE文件放到任何计算机就可以访问数据库?

这个很难说的,我只会用ADODataSet、DataSource、DBGrid三个控件  
  ADODataSet1.ConnectionString:='Provider=SQLOLEDB.1;Persist   Security   Info=False;User   ID=sa;PassWord=123456;Initial   Catalog=gongda;Data   Source=XINX';  
  DataSource1.DataSet:=ADODataSet1;  
  SqlString:='select   *   from   cjyg   where   username   is   not   null';  
  ADODataSet1.CommandText:=SqlString;  
  DBGrid1.DataSource:=DataSource1;  
  DBNavigator1.DataSource:=DataSource1;  
  ADODataSet1.Active:=True;  
   
  简单的程序可以直接生成*.exe,但是你如果用到一些文件的话,就需要额外的设置了,如:  
  uses   QDialogs,那么就得需要在系统目录下面有qtintf70.dll了。

现在都用ado   了

我编译后生成的EXE文件放到另外一台电脑上就不能跑了。是否需要在每台电脑都这样设置?  
  =================================================================================  
  如果使用BDE,必须在每台运行程序的机器上安装配置BDE。当然,如果用三层的,可以只配置应用服务器所在计算机,其它计算机不必配置

用ADOCONNECTION,ADOTABLE要配合哪个才能把数据表显示出来?  
  另如果只是要选择某个子段,而不是显示整个表呢?

adoconnection,adodataset(可以设置SQL语句),datasource,tdbgrid.后面两个的使用与BDE用法一样。

posted @ 2008-10-20 10:33 delphi2007 阅读(143) | 评论 (0)编辑 收藏

通过DBE连接SQLSERVER2000数据的问题? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061224162128131.html
本身他的软件用delphi3.0与sqlserver6.5开发的,原先通过DBE来实现数据的远程读取,建产实名的驱动是mssql  
  现在因服务器升级到win2003了,数据库也变成sql2000了,但按原来的方法就是实现不了,老是连不上  
  不知那位大侠知道为何连不上  
   
  我是全试了,驱动mssql与   sql   server两个都建了都不行,delphi3.0软件还是在win95系统中

我看你试一下使用ODBC看能不能解决这个问题.因为delphi3.0实在是太老了.

posted @ 2008-10-20 10:32 delphi2007 阅读(229) | 评论 (0)编辑 收藏

请问如何清空StringGrid里面的数据???急! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061224144815132.html
请高手指点,我在StringGrid里面录入数据完后,保存后,想重新录入新的数据,可原先那些数据还在,怎么清空啊?

var  
      Idx:   Integer  
  with   StringGrid   do  
  begin  
      Perform(WM_SETREDRAW,   0,   0);    
      try  
          for   Idx   :=   FixedRows   to   Rowcount   -   1   do  
              Rows[Idx].Clear;  
      finally  
          Perform(WM_SETREDRAW,   1,   0);  
          Invalidate;  
      end;  
  end;  
 

stringgird分为2维Tstrings类型,你要清除这样写  
  For   I=0   to   StringGrid.ColCount-1   do  
  StringGrid.cols[I].clear;

建议从列开始,因为行比列多,循环次数多!

谢谢!

posted @ 2008-10-20 10:32 delphi2007 阅读(1440) | 评论 (0)编辑 收藏

这种打印该怎么实现 ? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061224122441133.html
一次预览打印多张单子   (50-100)      
     
          譬如一次预览打印     B001号,B002号.......B100号     单子       ,发送完打印机打印单子,人和计算机就可以干其他的事情了,不用一张一张地发送打印作业    
   
        应该怎做?

同时读取多张单子,每张单子打一页就行了,有什么麻烦的.

怎么实现同时读取多张单子?     不太明白   ....  
             
              譬如一张单子的界面,输入单号     ,调出单子的内容,   此时预览和打印只是当前单子的内容,单子的明细项多了,超过一页自动往后加一页,但这还是一张单子     。  
              我说的是怎样这时预览,可以把本单子和以后的若干单子     一并在这个预览界面里显示,发送打印就可以。  
              报表   的格式           表头:在一张单子的开始一页        
                                              表身:明细项数据  
              这就是一张报表   ,     我说的意思是怎样把这些散的一张张的报表     连在一起   。  
  不知道说明白了          
 

如果用fastreport,可以设置纸张大小后,就自动帮你分页,当然也可以设置打印行数

for   i=1   to   10   do  
  begin  
      reprtproject1.vareables['text1']:=   ''''   +   ado.fieldbyname('danhao').asstring   +   ''''  
   
      reprtproject1.proparereport(false);  
      ado.next;  
  end;  
      reportproject1.showpreparereport;

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

DELPHI与WORD怎样连用 急~急~ Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061224122056134.html
我想用DELPHI做一个简单的数据库,在输入完内容后用WORD打印出,但是不知道用什么控件及代码应怎样写,我是位新手,请高手多多指教。(注:打印出来是带用表格形式的)

http://community.csdn.net/Expert/topic/5238/5238318.xml?temp=3.475368E-03

导出DBGrid为Word表格。  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      WordApp,WordDoc,WordTable:OleVariant;  
      i,j:integer;  
  begin  
      WordApp:=CreateOleObject('Word.Application');  
      WordApp.Visible:=True;  
      WordDoc:=WordApp.Documents.Add;  
      WordTable:=WordDoc.Tables.Add(WordApp.Selection.Range,DBGrid1.DataSource.DataSet.RecordCount+1,DBGrid1.Columns.Count);  
      for   i:=1   to   DBGrid1.Columns.Count   do  
      WordTable.Cell(1,i).Range.InsertAfter(DBGrid1.Columns[i-1].Title.Caption);  
      i:=2;  
      with   DBGrid1.DataSource.DataSet   do  
      while   not   eof   do  
      begin  
          for   j:=1   to   DBGrid1.Columns.Count   do  
              WordTable.Cell(i,j).Range.InsertAfter(DBGrid1.Columns[j-1].Field.Value);  
          Next;  
          Inc(i);  
      end;  
  end;

谢谢~!   我试试!

posted @ 2008-10-20 10:32 delphi2007 阅读(136) | 评论 (0)编辑 收藏

求一个Turbo Delphi Pro版本的下载地址啊~ Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061224104455135.html
要专业版的

关注

这个好吗?没用过咧,还在用D7呢。

帮UP下吧~

posted @ 2008-10-20 10:32 delphi2007 阅读(204) | 评论 (0)编辑 收藏

关于ADOTable的onCalcFields事件的执行 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061224092425136.html
在Table中有一个计算字段,在oncalcfields事件中计算过程执行的较长,计算的时间也较长,不过整个表只是显示,不需要修改数据,因此,只要第一次显示出来就后面就不需要再重新计算,现在问题是我每次移动记录指针,都要重新执行oncalcfields过程,这样就显得整个过程特别慢,有没有什么办法能够只要oncalcfields事件只在程序刚执行的时候执行,别的时候都不执行?

我建议你在后台表中增加一个字段,把计算好的值放进去。每次增加记录或修改记录的时候更新该字段。  
   
  计算字段是每次redraw列的时候都要重新计算的。

Table1.AutoCalcFields:=False;  
 

我不想改动后台数据库,至于无天说的我试过了,没有用!!

在你的Table所在的模块加一个标记,初始为False,计算一次后,设置为True,计算事件中进行判断。  
 

posted @ 2008-10-20 10:32 delphi2007 阅读(534) | 评论 (0)编辑 收藏

新手delphi 连接sqlSERVER数据库中的问题 很怪 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061224023208137.html
大家好   刚学Delphi   ,今天用ADOConnection   ADOquery   Datasource   连接SQLSERVER   数据库  
  遇见了奇怪的问题如下  
  常规步骤ADOConnetion   ->Connetion   String     出现   Connetiong   String   对话框   点build       出现“数据链接属性”窗口   -〉在“提供程序   ”下选Microsoft   OLE   DB   Provider   for   SQLServer   然后在   “连接”窗口下选1.   “指定数据源名称”时出现了   “错误枚举数据服务器。枚举器报告‘未指定的错误’”   这样的提示   很疑惑  
   
  因为数据库已经建好了,并且前面的好几个表都连接好了   都是按照正常的方法连接的,今天突然出现了这样的错误。。   下面的表也没法练了     不知为何。。。  
   
  恳请高手指点。。。。。谢谢。。。。。

就学习来说,这样的错误可以忽略,直接在数据源名称框录入数据服务器名称即可。

但是数据源名称框的下拉列表是空的啊找不到了   然后我又输入的名称  
   
  出现这样的错误到底是什么原因啊?   悉心聆听高手指点。。。谢谢。。

如果SQLSEVER服务管理器已经启动的话,  
  可以在数据源名称框录入   127.0.0.1     试试.

是的,输入127.0.0.1   之后可以找到需要的数据库    
  这是什么原因啊。。能否解释一下疑惑   谢谢。。。。。。

127.0.0.1   是默认的本机IP地址.LOCALHOST也可以.  
  如果SQLSEVER在别人的机上,输入别人的IP地址,同样可以打开数据库,这就是C/S程序啦  
 

非常谢谢   liu_vq  
  SQLServer   是由于怎样的原因才出现了这样的问题啊   :虽然可以找到建好的数据库,但   在“指定数据源名称”的下拉列表中也没有了原来服务器的名字,   找不到这样问题的原因,一直感觉是SQLserver出现了问题,以后再连接的话都要重新输入服务器的名字   。。

你输入服务器的真实名字其实不好,因为每个机器的服务器名字都不同。你做好程序以后在别人的机器上会不能运行,还要再改,如果输入127。0。0。1的话,编译成EXE可以在所有的机器上运行的。  
   
  给分吧,兄弟

好的   大哥   我马上结帖  
  现在我是明白了输入127。0。0。1的好处了,    
  但为啥突然   会出现“错误枚举数据服务器。枚举器报告‘未指定的错误’”这样的错误呢?原来在在下拉列表中的名字也都没有了   还是和疑惑

应该是你没有输对.你仔细看看服务管里器的名字

我没有输入   只是在“指定数据源名称“的下拉的表框中选择  
   
  再点到“指定数据源名称“就出现了“错误枚举数据服务器。枚举器报告‘未指定的错误‘“  
   
  服务器的名字也没得选了,下拉列表框是空白

曾经也碰到这样的问题,那时候听高人说也算是MS的BUG   呵呵

赚点分不容易,楼主,结帐吧

占个位置

好的   尊重大家的意见   ,马上结帐  
   
  这个问题还是   有点疑惑   为啥会出现这样的问题,   不过现在又好了,和当初正常时的一样  
   
  难道这就是所谓的软件都有可能在任何时候发生意想不到的问题的一个实例吗?  
  还是真如Ganwendong(无为)兄所言   是   Ms的bug  
 

我的也是这个问题啊!

posted @ 2008-10-20 10:32 delphi2007 阅读(784) | 评论 (0)编辑 收藏

ADODataSet的参数问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061224005223138.html
select   *   from   table   where   :cur_field   =   :cur_key  
   
  这样写对吗?为什么我给传递了值之后一条记录也没出现?

select   *   from   table   where   :cur_field   =   :cur_key    
  --------------------------------------------------  
  你要干什么?   呵呵呵呵。  
   
  你的字段是什么?  
   
   
   
 

哪有这样的写法,呵呵。参数只能现在=后面

只需要一个:   字段名前面不需要加:   这个只是在参数名前面加的

select   *   from   table   where   cur_field   =:   cur_key  
  还要看你的cur_key是怎么了?反正你试一下就可以了,试这个不行就试这个  
  select   *   from   table   where   cur_field   =   cur_key

谢谢大家,试过了,字段名确实不能用参数,或者是说,参数不能在=号左边?  
  呵呵~~~还是使用个全局变量来存放SQL语句

我的本意是,让用户通过选择字段和填写关键字来进行查询

忘啦给分,不好意思

posted @ 2008-10-20 10:32 delphi2007 阅读(210) | 评论 (0)编辑 收藏

高分请教进销存系统的应付款,应收款模块 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061224004142139.html
如题:  
   
  要求1:   结算方式:2种以上  
   
  要求2:明细账,往来账,等  
 

把管家婆的存储过程打开,里面什么都有。(只能作为个人研究用,不可作为商业用途)

还是需要把应付款,应收款的基本知识搞懂,最基本的财务知识.

企业往来账款按基本性质可分为应收款和应付款两大类,前者主要包括应收帐款、其他应收帐款、预付帐款,属于资产方科目,借表示增加,贷表示减少;后者主要包括应付帐款、其他应付款、预收帐款,属于负债方科目,贷表示增加,借表示减少。

自己学会计,要么就得找个会计跟着,还不一定交流的明白

挺大的问题

posted @ 2008-10-20 10:32 delphi2007 阅读(77) | 评论 (0)编辑 收藏

关于List index out of bounds(0)的问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223203333140.html
运行输入数据按确定按钮后,弹出对话框说List   index   out   of   bounds(0),为什么会有这样的错误呢。代码如下:  
  unit   Borrow;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   DB,   DBTables,   Mask,   DBCtrls,   StdCtrls;  
   
  type  
      TBorrowForm   =   class(TForm)  
          GroupBox1:   TGroupBox;  
          GroupBox2:   TGroupBox;  
          GroupBox3:   TGroupBox;  
          Label1:   TLabel;  
          Edit1:   TEdit;  
          Label2:   TLabel;  
          Edit2:   TEdit;  
          Button1:   TButton;  
          DBEdit1:   TDBEdit;  
          Query1:   TQuery;  
          Query2:   TQuery;  
          Query3:   TQuery;  
          Query4:   TQuery;  
          DataSource1:   TDataSource;  
          DataSource2:   TDataSource;  
          DataSource3:   TDataSource;  
          Label3:   TLabel;  
          Label4:   TLabel;  
          DBEdit2:   TDBEdit;  
          Label5:   TLabel;  
          DBEdit3:   TDBEdit;  
          Label6:   TLabel;  
          DBEdit4:   TDBEdit;  
          DBEdit5:   TDBEdit;  
          Label7:   TLabel;  
          Label8:   TLabel;  
          Label9:   TLabel;  
          Label10:   TLabel;  
          DBEdit6:   TDBEdit;  
          DBEdit7:   TDBEdit;  
          DBEdit8:   TDBEdit;  
          Button2:   TButton;  
          Button3:   TButton;  
          Button4:   TButton;  
          Button5:   TButton;  
          procedure   Button1Click(Sender:   TObject);  
          procedure   Button2Click(Sender:   TObject);  
          procedure   Button3Click(Sender:   TObject);  
          procedure   Button4Click(Sender:   TObject);  
          procedure   Button5Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      BorrowForm:   TBorrowForm;  
   
  implementation  
   
  uses   Query,   Return;  
   
  {$R   *.dfm}  
   
  procedure   TBorrowForm.Button1Click(Sender:   TObject);  
  begin  
    if   Edit1.Text=''then  
          ShowMessage('请输入书号和读者编号!')  
      else  
          if   Edit2.Text=''   then  
                else  
                    begin  
                      Query1.Params[0].AsString:=Edit1.Text;  
                      Query1.ExecSQL;  
                      Query1.Active:=true;  
                      Query2.Params[0].AsString:=Edit2.Text;  
                      Query2.ExecSQL;  
                      Query2.Active:=true;  
                      Query3.Params[0].AsString:=Edit2.Text;  
                      Query3.ExecSQL;  
                      Query3.Active:=true;  
                    end;  
  end;  
   
  procedure   TBorrowForm.Button2Click(Sender:   TObject);  
  begin  
            if   DBEdit4.Text=''   then  
                    showmessage('该书已借出,请选择其他!')  
            else  
                    begin  
                        Query4.SQL.Clear;  
                        Query4.SQL.Add('INSERT   INTO   借阅   VALUES(Edit1.Text,Edit2.Text,SYSDATE)');  
                        Query4.ExecSQL;  
                        Query4.SQL.Clear;  
                        Query4.SQL.Add('UPDATE   图书   SET   借出否:=True   WHERE   书号=Edit1.Text');  
                        Query4.ExecSQL;  
                        Query4.Close;  
                    end;  
  end;  
   
  procedure   TBorrowForm.Button3Click(Sender:   TObject);  
  begin  
        QueryForm.show;  
  end;  
   
  procedure   TBorrowForm.Button4Click(Sender:   TObject);  
  begin  
        ReturnForm.show;  
  end;  
   
  procedure   TBorrowForm.Button5Click(Sender:   TObject);  
  begin  
        BorrowForm.Close;  
  end;  
   
  end.

天,你的命名太那个了吧...  
  不知道哪个是你的确定按钮  
  这个错误是列表越界的通用提示,引用了一个空列表的值  
  再仔细找找原因

本人是菜鸟,请问"列表越界“是怎么回事啊?

大侠门,帮我解决一下问题吧,感激不尽啊。

F8断点调试吧

Query1.Params[0].AsString:=Edit1.Text;  
  Query2.Params[0].AsString:=Edit2.Text;  
  Query3.Params[0].AsString:=Edit2.Text;  
  ---------------------------------------  
   
  问题出在你的Query1~Query3的参数中。   你确定每个QUERY的SQL中都带有参数吗?可以肯定的是至少有一个没有带参数。请检查。把参数加上后一切就会大大的OK的。

还是老冯厉害,和我所见略同,呵呵。

老冯说得对!   先检查一下SQL中是否有参数,  
  另外你的代码有错误:  
  Query4.SQL.Add('INSERT   INTO   借阅   VALUES(Edit1.Text,Edit2.Text,SYSDATE)');  
                        Query4.ExecSQL;  
                        Query4.SQL.Clear;  
                        Query4.SQL.Add('UPDATE   图书   SET   借出否:=True   WHERE   书号=Edit1.Text');  
                        Query4.ExecSQL;  
                        Query4.Close;  
  Edit的值不能这样引用到query4中,例如:Query4.SQL.Add('INSERT   INTO   借阅   VALUES('''+Edit1.Text+''','+'''+Edit2.Text+''',SYSDATE)');  
 

代码中错误太多,像楼上各位说的。  
  还有ExecSql和Active   :=   True不要乱用,也不要混用。

我在Query1~Query3都有参数了,分别是:  
  query1:  
  select   *   from   图书   where   书号='+''''+Edit1.Text+'''  
  Query2:  
  select   *   from   读者   where   编号='+''''+Edit1.Text+'''  
  Query3:  
  select   str(count(*))+'本'   from   借阅   where   读者编号='+''''+Edit1.Text+'''  
  请问老冯,我的这些参数对吗?  
  我的上面给的程序是实现图书馆管理系统中的借书功能。

错了Query1~Query3的参数应该是:  
  query1:  
  select   *   from   图书   where   书号='+''''+Edit1.Text+'''  
  Query2:  
  select   *   from   读者   where   编号='+''''+Edit2.Text+'''  
  Query3:  
  select   str(count(*))+'本'   from   借阅   where   读者编号='+''''+Edit2.Text+'''  
  请问,我的这些参数对吗?

呵呵,你这样是没有参数啊。

难怪越界呢。一个参数也没有。  
  还有SQL语句里是没有:=的。  
  Query4.SQL.Add('UPDATE   图书   SET   借出否:=True   WHERE   书号=Edit1.Text');

那请问怎么设置参数呢?各位高手。

posted @ 2008-10-20 10:32 delphi2007 阅读(1430) | 评论 (0)编辑 收藏

delphi 6.0 如何做 订单 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223202228141.html
请帮忙,有关客房押金单例子,用delphi   6.0来做

嘴怎么吃东西?  
  问题类似  
  怎么着也把需求说出来吧  
  不过有个最简单的例子  
  去网上搜吧

楼上回答逗,呵呵

posted @ 2008-10-20 10:32 delphi2007 阅读(114) | 评论 (0)编辑 收藏

关于应付款问题,请各位大侠帮忙,谢谢!~ Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223192249142.html
在下正在做一个进销存系统,因为是第一次做进销存系统,所以有个问题,一直搞不清楚,请各位大侠帮忙;  
   
  问题1:应付款模块分析,大家说说看;

我在另一贴简单的解释了往来帐、应收款和应付款,但是实际上这是一个比较复杂的财务知识问题,不少财务专业的新手都容易被这个问题搞糊涂,作为一个编程人员,不必了解那么多,让精通财务的人员配合你就行了。

posted @ 2008-10-20 10:32 delphi2007 阅读(87) | 评论 (0)编辑 收藏

请教关于数据库编程方面的问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223161746143.html
大家好,我最近才接触DELPHI6.0,想请教一下大家关于DELPHI6.0数据库编程方面的学习资料哪些网站上比较齐全,最近要搞一个小型的程序,就是一些财务报表程序,把数据库里的财务资料调用出来,呈现在报表上,并可以保存成EXCEL格式,请问大家哪些网站上可以找到做报表程序的资料

CSDN

大富翁现在好像关啦,那上面不错,我比较喜欢。

请问有没有一些专门研究DELPHI的群,以便加入一齐学习DELPHI

还想请教一下大家,在哪里可以找到用DELPHI开发的人事工资管理系统,最近正在开始做财务方面的系统,第一步就是要搞好人事工资管理,请问大家有没有留意过这方面的内容,谢谢

用Devexpress控件中的cxgrid来做,功能强大,里面有很多例子,包括导出EXCEL

想知道大家在找DELPHI开发资源时会去哪些网站,除了CSDN,我想找一些关于某些系统开发的范例,比较完整的开发过程文档,请问大家可以为小弟提供这方面的知识和资源吗

www.2ccc.com  
  www.tomore.com

posted @ 2008-10-20 10:32 delphi2007 阅读(44) | 评论 (0)编辑 收藏

关于dbchart 的使用~~~~~~ Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223145156144.html
adoquery1.SQL.Add('select   *   from   a   group   by   cjx');  
      adoquery1.Active:=true;  
      series2.Active:=false;  
      series2.DataSource:=adoquery1;  
      series2.   xLabelsSource:='cjx';  
      series2.yValues.ValueSource:='有效时间;  
      series2.Active:=true;  
  a表中的   字段    
  jh   有效时间   cjx  
        0.2             H  
        0.3             H  
        0.0             i  
        0.4             J  
  这是我用dbchart制作的饼状图,我想实现的是   求cjx   下   H,I,J     各占   总数的百分数  
  象我那样写   就是   I占了0%   我想让求得的   I   占了1%才对吗??H,J   的结果也不对啊!    
  我应该如何写啊!!  
   
 

select   count(有效时间),cjx   from   a   group   by   cjx

这样会说没有找到‘有效时间’这个字段啊  
 

你的a表里都有哪几个字段?

对不起了   昨天不能上网了  
  a表中有      
  jh,ch,有效时间,cjx  
  有效时间是   浮点型的  
  其他的是字符型的   ~~~~~  
 

我把你的有效时间改成了Tm,最好不要用中文字段名  
   
  代码如下,没问题  
   
      Query1.Close;  
      Query1.SQL.Clear;  
      Query1.SQL.Add('select   sum(Tm)   as   nfield,Cjx   from   aaa   group   by   Cjx');  
      Query1.Open;  
      series1.Active:=false;  
      series1.DataSource:=query1;  
      series1.xLabelsSource:='cjx';  
      series1.yValues.ValueSource:='nfield';  
      Series1.Marks.Style   :=   smsPercent;  
      series1.Active:=true;

恩   好了可以了  
  还要问一下   柱状图时   柱子的颜色怎么改啊!!我的怎么都是一个颜色啊   !!有的还没有柱   只有百分数

3d   下的柱子就是一个颜色的啊!!!!

好了     给分了

谢谢了   给分了

posted @ 2008-10-20 10:32 delphi2007 阅读(293) | 评论 (0)编辑 收藏

請教:如何漢化infopower4000的几個對話框? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223124147145.html
 
  請教:如何漢化infopower4000的几個對話框?  
   
  如   wwDBNavigator1SearchDialog   、wwDBNavigator1LocateDialog   、wwDBNavigator1FilterDialog   等里面的文字?多謝!!!

 
  請大俠幫忙!

如果有源码的话,汉化起来应该不难呀,没有源码就不好办了。

posted @ 2008-10-20 10:32 delphi2007 阅读(111) | 评论 (0)编辑 收藏

如何快速删除Access指定字段的重复记录 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223120244146.html
我有一个ACCESS数据表如下  
  ID     Name       Score  
  1       老张       80  
  2       王二小   70  
  3       老张       80  
  4       李小黑   90  
  ====================  
  现在我想删除   字段   Name   重复的纪录,达如下效果:  
  ID     Name       Score  
  1       老张       80  
  2       王二小   70  
  4       李小黑   90  
   
  请问,在DELPHI里面操作ACCESS怎么做最快?  
  我查询了CSDN见到一个人操作ACCESS用了这样的表达式:“  
   
  这个是公认的最快的删除重复记录的SQL:        
           
      DELETE       FROM       EMP       E     WHERE       E.ROWID       >       (SELECT       MIN(X.ROWID)   FROM       EMP       X       WHERE       X.EMP_NO       =       E.EMP_NO);           ”  
   
  我自己如果要做,应该怎么做速度最快呢?    
   
  请给出思路  
 

你这个问题好像没什么好办法,  
  这样做吧,  
  Function   GetDelReocrdsID:   string;  
  var  
      midStr,ResultStr:string;  
  begin  
        with   adodataset   do  
        begin  
            if   active   then   active:=false;  
            commandtext:='select   *   from   EMP   order   by   [Name]   asc'   ;   //   一定要排序  
            open;   midStr:='';   ResultStr:='';  
            while   (Not   eof)   do  
            begin  
                if   trim(midstr)=trim(FieldByName('Name').asstring)   then  
                ResultStr:=ResultStr+FieldByName('ID').asstring+',';  
                else   midStr:=FieldByName('Name').asstring;        
                Next;  
            end;  
            if   result<>''   then  
            result:=Copy(ResultStr1,length(ResultStr)-1)  
            else   result:='-1'  
            Close;      
        end;  
  end;  
   
  procedure   deleteSelectRecord;  
  begin  
        with   Adocommand   do  
        begin  
              commandtext:='Delete   From   EMP   where   ID   in   ('+GetDelReocrdsID+')';  
              execute;  
        end;  
  end;

posted @ 2008-10-20 10:32 delphi2007 阅读(395) | 评论 (0)编辑 收藏

数据库问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223120124147.html
怎样将两个.dbf数据库文件,导入到一个表里?

在SQL中有一个叫企业管理器的东西.找到它然后找到你的目标数据库,鼠标右键有个导入数据,里面有个选项叫:使用一条查询语句导入.然后你就在这个查询语句中写一条SQL命令,该命令同时查两张表,但是只会生成一个结果,系统会将该结果做成一张表.你就达到目的了.

直接用SQL就可以了  
  首先用ADO连dbf,连接串(d:\temp为你数据所在目录)  
  Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data   Source=d:\temp;Extended   Properties=dbase   5.0;Persist   Security   Info=True  
  如果两表结构相同,用以下SQL  
  1.目标数据表已存在:  
  select   *   into   新表   from   (select   *   from   表1   union   select   *   from   表2)  
  1.目标数据表不存在:  
  insert     into   t   select   *   from   (select   *   from   t1   union   select   *   from   t2)  
   
   
   
   
 

上面写反了.目标数据表已存在用insert     into    
  目标数据表不存在用select   *   into

keiy(),您好,您的方法我试了一下  
  我的意思是有没有直接将两个.dbf文件导入到SQL的一个表里面的方法  
  谢谢~~大家还有什么好方法呢?

我以为是你要合并两个表,生成新的dbf表,如果是要导到sqlserver中,可直接在sqlserver中执行:  
  SELECT   *   into   新表   FROM   OpenDataSource(   'Microsoft.Jet.OLEDB.4.0',  
      'Data   Source="d:\temp";User   ID=Admin;Password=;Extended   properties=dBase   5.0')...表1  
  insert   *   into   新表   FROM   OpenDataSource(   'Microsoft.Jet.OLEDB.4.0',  
      'Data   Source="d:\temp";User   ID=Admin;Password=;Extended   properties=dBase   5.0')...表2  
  当然,在程序中也是一样的,只要先用ado连接sqlserver,再执行上面两条SQL语句就可以了

谢谢

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

请问如何获得存储过程中错误后的数据!谢谢 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223113858148.html
我有一个存储过程,执行过程中要是@@error不为0的时候会返回一个错误信息的结果集.例如不能插入重复键的时候,我会:  
  select   -1,'已经有相同的用户注册了!请重选择另外一个用户名!'  
  我在查询分析器里面执行完这个存储过程,如果真出现这个错误,它是有这个结果集产生的,同时它也会抛出异常.在delphi中用Tadoquery控件执行这个存储过程,系统会检测出这个错误,同时在那里停止,不再执行下一步了.我如何才能让它不出错,而且获取到那个存储过程返回的错误集合:  
  "-1,'已经有相同的用户注册了!请重选择另外一个用户名!'"  
  ,并对那个集合进行判断,来做我应该做的事?

2000里面无法屏蔽掉sql自己抛出的错误.  
   
  2005可以用try   catch,   这样可以自己来决定错误处理方式  
   
   
  无论是2000还是2005,   严重的错误始终会终止处理

我是这样处理的可以有效地干掉你说的重复键这样的问题:  
  N1:=0;  
  TRY  
      <执行插入语句>  
  EXCEPT  
      N1:=1;  
  END;  
  IF   N1=1   THEN  
        BEGIN  
              <这里表示出出错的信息>  
        END;

谢谢各位的捧场!

posted @ 2008-10-20 10:32 delphi2007 阅读(127) | 评论 (0)编辑 收藏

非常有挑战性的问题,提高时实刷新速度 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223094441149.html
 
      非常有挑战性的问题,提高时实刷新速度  
   
      比如做一套类试影吧的系统,需要一个时实监视客户端的一个收费软件  
   
      监视台用StringGrid   控件实现,时实(每秒钟一次)刷新数据库中的一个由Server后台写好  
   
      好的一个临时表,StringGrid判断字段值改变时才重画,  
   
      这种方法,起初数据表这有几十条,占用CPU   时间才8%左右,但数据库加到  
   
      2000多条时,CPU   时间马上升到   70%,  
   
      我估计主要的时间是用在ADOQuery.open上了  
   
      还有StringGrid是通过   for   循环给每行赋值的。  
   
      请问,有没有提供好的思路和方法!  
 

应该不至于吧,你几十条都占用了CPU   8%,可能是写法有问题吧。  
  你干嘛要不停地判断呢?有时间做判断不如直接写上去好了。  
  2000多条记录,刷新一次应该没多长时间。

首先说明  
  1、首先跟踪一下,看看时间都花在那里了  
  2、如果你的SQL语句不是特别奇怪,那么最多的时间是花在重画StringGrid上  
  3、画StringGrid的时候不要一下子都画出来,把当前显示的画出来即可,然后当StringGrid滚动的时候继续画

2000条都读取出来有意义吗?还是做成翻页的好。  
   
  在修改表的时候在其它地方设置一个状态,所有的客户仅检查这个状态。  
   
 

用StringGird?   为什么不用DBgird,这样效率更高呀!   不解!   还有为什么不做分页,就是说,设置一个时间范围,把记录分为加急,就绪,一般,三个等级来排序。   这样可以优先处理那些即将到时的数据。

 
      感谢大家的回复!  
   
      说明,我做的一套影吧的收费管理系统。  
   
      客户端是机顶盒,所有的数据都是通过   Server.exe   charge.dll   完成的,存储在  
   
      数据库中,我要的就是时实显示每个客户端的状态:  
   
      我也知道DBGrid速度比较快,但存在几个问题:  
   
      1、刷新的时候DBGrid总是很闪;  
   
      2、必须绑定数据源;  
   
      3、界面操作的灵活性也没有StringGrid好;

那我建议你用过Socket来做吧!

内部用一个线程来检查是否有更新,如果数据有变化在刷新界面.这样界面刷新的频率就很小很多。也就不闪了。  
   
 

 
      接受   winxkm(蹩脚的程序员)     的意见

posted @ 2008-10-20 10:32 delphi2007 阅读(166) | 评论 (0)编辑 收藏

请教各位高手,如何将记录号加到dbgrid 中? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223091242150.html
下面我的dbgrid中显示的代码,如何将记录号加到dbgrid   列中,谢谢了!  
  qq1:=tadoquery.Create(self);  
      qq1.Connection:=conn;  
      with   qq1   do  
      begin  
          close;  
          sql.Clear;  
          sql.Add('select   id,haoma   as   号码,guishu   as   归属地,tongxunming   as   通讯公司   from   haoma   ');  
          open;  
      end;  
  datasource1.DataSet:=qq1;  
      dbgrid1.DataSource:=datasource1;

id   不就是记录号么

id   只是数据库中的一个自动编号,不一定是从1开始,按依次加1的顺序往下走的

{覆盖DrawCell事件,显示行序号   NO   }  
  procedure   TDBGridEh.DrawCell(ACol:Integer;ARow:Integer;ARect:TRect;AState:TGridDrawState);  
  var  
      i,DBRow,lLeft:integer;  
      iCol,iRow:integer;     //全局变量  
  begin  
      inherited;  
   
      {是否开启显示行号功能!}  
      if   fShowRecNo=True   then  
      begin  
          if   Assigned(DataLink)   and  
                  DataLink.Active   then   //没有open  
          begin  
              if   (ARow>=1)   and  
                      (ACol=0)   then{行标头之内}  
              begin  
                  i                           :=   0;//偏移值  
                  lLeft                   :=   0;//居中显示  
                  DBRow                   :=   self.DataSource.DataSet.RecNo;//当前数据集所在的行标   rec   no  
                  if   DataSource.DataSet.RecNo=-1   then{新增记录状态}  
                  begin  
                      DBRow   :=   DataSource.DataSet.RecordCount+1;//当前行标取记录总数+1  
                  end;  
                  i             :=   DBRow   -   self.Row   ;//计算表格TopRow和数据集所在行的偏移值(显示实际数据集行号)  
                  lLeft     :=   (ARect.Right   -   ARect.Left)   div   2   -   Canvas.TextWidth(IntToSTr({DataLink.ActiveRecord}ARow+i))   div   2;//居中显示  
                  Canvas.TextRect(ARect,ARect.Left+lLeft,ARect.Top,IntToSTr({DataLink.ActiveRecord}ARow+i));//输出行号  
              end;  
          end;  
      end;  
  end;

 
      完整的有个控件,使用非常简单!  
       
      留下Email,我发给你.或加我QQ:67016879  
   
 

1、在DBGRID中增加一列,列名的抬头比如说是'序号'  
  2、代码:  
   
  procedure   TForm1.DBGrid1DrawColumnCell(Sender:   TObject;   const   Rect:   TRect;  
      DataCol:   Integer;   Column:   TColumn;   State:   TGridDrawState);  
  begin  
        if   DataSource1.DataSet.RecNo   >   0   then  
      begin  
          if   WideUpperCase(Column.Title.Caption)   =   '序号'   then  
              DBGrid1.Canvas.TextOut(Rect.Left   +   2,   Rect.Top,   IntToStr(DataSource1.DataSet.RecNo));  
      end;  
  end;  
 

好麻烦.

结贴

posted @ 2008-10-20 10:32 delphi2007 阅读(241) | 评论 (0)编辑 收藏

低版本写的程序迁移到高版本??? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061220174703101.html
如d5   ->   d7  
  1.怎么迁移?  
  2.有迁移向导么?  
  3.做哪些准备或改动?  
  4.注意事项?

这个有点难...  
  关键看你都用了那些组件  
  不如重写一遍,估计有很多现成的东西可以直接拿来用

d5   ->   d7容易啊,直接编译,如有错误,稍作改动就行。  
  d5一下->d7就麻烦,高版本->低版本更痛苦,只能重新写了

posted @ 2008-10-14 16:36 delphi2007 阅读(136) | 评论 (0)编辑 收藏

这算是listview的bug吗? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061220171729102.html
我想把listview里选中的一行纪录的某个字段保存到edit里,代码如下:  
   
  edit1.text:=listview1.Selected.SubItems.ValueFromIndex[10];    
   
  奇怪的问题是,比如这个字段在listview里显示的是“10272”  
  放到edit里确显示为"0272"   ,第一个字符消失了  
   
  第一次遇到这个问题,是listview的bug吗?我用的D7  
 

暂时解决了  
  edit1.text:=listview1.Selected.SubItems.Strings[10]  
  就没问题  
   
 

String都不用写,直接写edit1.text:=listview1.Selected.SubItems[10]

无语   。。。那么多bug   宝兰不要活了

posted @ 2008-10-14 16:36 delphi2007 阅读(122) | 评论 (0)编辑 收藏

两个字节,如果写入一个大于65535的数? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061220165725103.html
正常情况下FFFF为65535,如何突破呢?

突破不了了,想办法改成四个字节吧

有没有什么压缩算法?或高招,大家帮我想想.今晚就散分.

觉得已没有可能了。除非这个范围内有大量的数据段永远不会用到。

比如说连续有5个1就写入51.

这个二进制1111111111111111,如果写入161,即F1.

那你如果写入51时怎么办?数据就乱了

我想有没有一种这样的思路,数据压缩我也是一样的吗?

用个指针传址好了,呵呵,或者使用宏定义

自己定义一个读写规则吧,比如象浮点数的存储协议一样

Elysium(東鱗覀爫),具体怎么做?我往一个二进制文件中写入Filewrite(handle,VALUE,2);  
  VALUE怎么突破65535?

楼主,不要想了,赶紧加字节吧

压缩机制也是可以,但是好像是针对字节,不是针对位,如果就两个字节,16位,意义不大

用的时候替换可以,写进去就不行了,比如写进去一个"A""A"表示大于65535倒是可以,但是如果从0~65535都可能出现的话也是不行,所有组合都被枚举了

晕了  
  除非你想用大于1的步进计数,要不然是不可能的  
  就跟让你用牙咬自己的耳朵,除非你是假牙或假耳朵

除非数字是整倍数的,比方说,只用10以上的数,那么可以增加10倍容量。哈哈

如果是向两个字节里写入大于65535的整数,楼主还是不要想了,乖乖的增加字节吧

二个字节一共65536(0-65535)种状态,除非你的数据是有规律的,否则不可能表示大于65535的数

楼主真强,现在的高手都习惯了解决难问题  
  碰上个这么XX的,就...哈哈,真逗...

:)

加字节吧,我以前也试过,不行的,呵呵,

keiy()   的话  
   
  二个字节一共65536(0-65535)种状态,除非你的数据是有规律的,否则不可能表示大于65535的数  
   
   
 

把它和65536的差写进去

FFFF   =   65535   是使用16进制,   如果使用更高的进制可以吗?例如17进制,  
  0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F   H  
  FFFF   =   十进制   15   *   16^3   +   15*16^2   +   15*16   +   15   =   65535  
  HHHH   =   十进制   16   *   17^3   +   16*17^2   +   16*17   +   16   =   ..  
 

如果使用更高的进制可以吗?例如17进制  
  =======================================================================  
  进制只是一种表示方法,最终计算机只认识0和1,你就20进制也不行,反正2字节只有16个位。

没事找事...

理论上讲,等量子计算机开发出来,就有突破了。

楼主真是有创意,我不得不服.......

只有10块钱,怎么买一条电脑?  
   
  要么加钱,要么就用10块钱的电脑!

无语-_#!

如果真要写个比65535大的数,其实,最简单的方法是……  
  11111111   11111111  
  前8位是底数,后8位是幂,  
  也就是说,用2字节+一系列算法,把FF   FF让计算机理解成FF的FF次方…………

看到这么多**对这个问题感兴趣,我还是保留一下.本来答应昨天结贴的,或许被管理员提到首页呢~

For_suzhen(不懂装懂)和ClarkKidd(神!啊!)   的想法不错.有等大家讨论.

注意啊,人家楼主说的是:   两个字节,如果写入一个大于65535的数.       ----写入!!!!!!

一分钟,如何突破60秒?

可能我的表达有误,让大家误解了.现在有一批记录,记录号在0..10万之间,不连续.现在把按条件查询出来的记录号写入两个字节.当然65535以下是可以写入两个字节的,大于65535的记录号没办法写入了,请问如何作处理了,大家给个好的办法?

这样想就是错了,略懂一点数学的人都知道大于65535数是无法用两个字节表示的

必需在两个字节里写吗?不能放宽一些吗?

就象前面ClarkKidd(神!啊!)   所说,如果用一字节做指数,一字节做底,这样可以表达一个很大的数.我只要表达出来就可以,而不是非要写入个65535.这样的话就需要一个算法,用两个字节表达0..10万的算法.

我在给客户做个索引方面的程序.现在2个字节,程序在650M左右,如果4个字节就超出1G了.一张CD光盘刻录不下了.总不至于换DVD吧.这年头还是考虑一下贫下中农吧.

上述方法虽然能很大,只是它是指数的函数,是跳跃式的,它不是连续。最终超过不65535记录。  
  除非你的值都在那个曲线上,天下没这么巧的事。

把电脑放到冰箱里,当温度达到零下4摄氏度的时候内存会膨胀,2个字节可以存储0..250000  
  电脑放到微波炉里,当温度达到100摄氏度的时候内存也会膨胀,具体大小不详。

我还有个最简单的法,同时启动两个程序不就OK了?  
  启动三个,你会有6个字节的空间呢!!!!!!!!!!!!!!!!!

LiHaiYan2001()         一分钟,如何突破60秒?  
  ---------------------------------------------------  
  支持  
   
   
  楼主:                         我在给客户做个索引方面的程序.现在2个字节,程序在650M左右,如果4个字节就超出1G了.一张CD光盘刻录不下了.总不至于换DVD吧.这年头还是考虑一下贫下中农吧.  
  -----------------------------------------------------------------------------------  
  楼主能把上述言论解释一下吗?

两个字节,无论你用什么方法,它最多表示出65536种不同的值。  
   
  你可以用来表示出0~65535这连续的65536个整数,也可以用来表示-32768~32767这连续的65536个整数,也可以用来表示65536个不同的字符(就象Unicode)。  
   
  但是无论如何,两个字节也表示不出第65537个值来的,这个再讨论也没结果的,不要浪费时间了。

其实倒是有办法的,关键在于楼主所说的不连续这一项,  
  可以用这种方法  
  两个字节,前一个字节   a   表示数值表的索引,后一个字节   b   表示偏差值,首先在文件首部建一个不连续数值表   X   ,长度256,那么存入的值可以这样表示   X[a]+b   ,但这样仍然只能有65536种变化,也就意味着你的索引数据长度只能小于等于65536,  
  还有一种方法,压缩,将数据压缩起来,这样原数据应该可以超过1G,在使用的时候取出适当的部分进行解压缩

楼主可以牺牲点精度么

理论上把所有数据都可以压缩成一个0和一个1  
  但有没有想到压缩算法占用的空间呢?

压缩算法是需要占空间,但是相比于节省出来的空间来说就不足为道了

以上两位真把压缩算法当成"神法"了,一共两个字节,16个Bit,还要压缩?

Elysium(東鱗覀爫),具体怎么做?我往一个二进制文件中写入Filewrite(handle,VALUE,2);  
  VALUE怎么突破65535?  
  --------------------------------------------  
  是不是做的文件编码规范不满足需求了,只能改成4个字节了。  
  不过有一种编码方式是自适应需求的,可以参考一下:  
   
  uintvar   -   variable   length   unsigned   integer  
   
  Many   fields   in   the   data   unit   formats   are   of   variable   length.   Typically,   there   will   be   an   associated   field   that   specifies   the   size   of   the   variable   length   field.   In   order   to   keep   the   data   unit   formats   as   small   as   possible,   a   variable   length   unsigned   integer   encoding   is   used   to   specify   lengths.   The   larger   the   unsigned   integer,   the   larger   the   size   of   its   encoding.  
   
  Each   octet   of   the   variable   length   unsigned   integer   is   comprised   of   a   single   Continue   bit   and   7   bits   of   payload.  
   
  To   encode   a   large   unsigned   integer,   split   it   into   7-bit   fragments   and   place   them   in   the   payloads   of   multiple   octets.   The   most   significant   bits   are   placed   in   the   first   octets   with   the   least   significant   bits   ending   up   in   the   last   octet.   All   octets   MUST   set   the   Continue   bit   to   1   except   the   last   octet,   which   MUST   set   the   Continue   bit   to   0.  
   
  For   example,   the   number   0x87A5   (1000   0111   1010   0101)   is   encoded   in   three   octets:  
  1   0000010   1   0001111   0   0100101.  
   
  The   unsigned   integer   MUST   be   encoded   in   the   smallest   encoding   possible.   In   other   words,   the   encoded   value   MUST   NOT   start   with   an   octet   with   the   value   0x80.  
   
  In   the   data   unit   format   descriptions,   the   data   type   uintvar   will   be   used   to   indicate   a   variable   length   integer   field.   The   maximum   size   of   a   uintvar   is   32   bits.   It   will   be   encoded   in   no   more   than   five   octets.   It   MUST   be   present   even   if   its   value   is   zero.  
   
  以上摘自WAP协议族WSP规范   (WAP-230-WSP)8.1.2,主要意思就是说把要编码的无符号整形数分为n个7bit,除了最后的一个7bit前补0外,其它的前面都补1,表示后面还有连续的字节。

晕倒,jadeluo(秀峰)   没搞明白我说的意思,我说压缩是指使用4字节来存储,然后把总体存储的数据进行压缩,压缩算法我还是懂一点的,当然明白2字节根本没有压缩的余地,但是最后存储出的文件当然可以有效压缩了,而且压缩比恐怕还是蛮高的....

报错,或者给截取了部分,结果还是错误

谢谢大家的讨论,放分了.

汗,使用的时候当然还要解压缩的说,

本来要结贴,但两次结贴没成功,停在那里死了.

var  
  s:string;  
  a,b:Integer;  
  begin  
   
      a:=StrTOInt(edit1.Text)   Div   256;  
      b:=StrToInt(edit1.Text)   Mod   256;  
      s:=s+chr(a)+chr(b);  
   
   
  看下这样行不行  
  可以存为两个字节

建议开发26个字母剩余的部分!   呵呵

to   ybbhond(路边卖菜的)  
  ===========================================================================  
  知不知道65536   div   256是多少?你1字节能放下吗?

默认+65535,比如你写个0001就是65536,那不就全部大于65535了。  
  如果要表示1至大于65535的数,楼主梦想,或者每一位都可以不止表示0和1。

别钻牛角尖了,换换思路吧??   你能把1秒的时间分成2秒的时间吗???  
   
  还是把你的需求说清楚吧、、、  
   
 

一张光盘就600M,假如客户10个G的数据,你都要刻在一张光盘上吗??  
   
  即使能,那以后如果数据再涨呢,你还非得硬要向一张光盘上写吗???  
   
  要么换思路,能多张盘刻录,同时你的程序又能读取,要么重新设计方案,看怎么能使索引尽量小而承受更大的数据量。  
   
  不过有一点是肯定的:你抱着那2字节,等一万年,你也不能把大于65536的数值写进去!!

数据是有规则的!你可以建立你自己的规则!  
  如果你你数据只在0..>65535范围的话,你可以:  
  >65535的数    
  65536=-1  
  65537=-2  
  65538=-3  
  ......  
  写进磁盘里去,在自己读出时,-1,-2,-3.....就转换一下就好了!  
 

如果你能规定1个字节不是8bit就可以了,比如规定1个字节是20位,看看能不能保存65536

to       maozefa(阿发伯)    
   
  65536   div   256  
   
  chr  
  取他的字符,结果是一位吧,但字符是一些乱码,  
   
  不过都是可以还原成原来的数值。  
   
 

To   ybbhond(路边卖菜的):   你需要好好补补基础课了。  
   
  65536   div   256   =   256,256如何存入一个字节中?这个问题与楼主的65536如何存入两个字节完全一样,同样无解。  
   
  前面已经说过了,两个字节只能表示65536个不同的值,想表示第65537种值是没有可能的,不要再在这上面浪费时间了。

同意楼上,就像一个位怎样存储大于2的数字一样。肯定无解。

如果你真的要存,不如转换字符‘56568989892323’你想多大就多大。。。。读时就取几位就好了。。。。

hsgrass37301(零点)   兄与我想法一样! 这是个最简单的方法!  当然压缩也没问题! 只是算法麻烦些! 如果真的想用这方法和我联系吧     现在上班没时间写!:)     MSN:   xhxlss@163.com

zhmnsw(糖醋鼻子)  
  理论上把所有数据都可以压缩成一个0和一个1  
  ------------------------------------------  
   
  你们老师就这样教你的?  
 

哈哈,首先肯定楼上ahjoe(强哥)反问得好,反问得对。  
   
  然后,跟zhmnsw(糖醋鼻子)等开个玩笑:你比较适合去学道家阴阳学。因为对阴阳家来说,世界万物,无非阴阳。道生一,一生二,二生三,三生万物。道家看数据块:1就是有数据,0就是无数据。哈哈。精度要求不高。

唉,原来如此,这个问题还要讨论吗?  
  数据库中的字段长度,谁都知道需要根据实际数据调整,你明明可能要存到5个字节,你就给它两个字节长度,怎么弄,现在上个厕所都要收钱的!  
  都这样搞,还建索引干吗,数据库都论TB的了,不知道你省的那点空间以后可能会给你造成多大的麻烦!

谢谢大家,从大家的讨论中我受益匪浅,而lxtnt()   给我的帮助最大,而我要保存的ID号全是正数,而当大于65535时,我是这样做保存的,即:  
  -(ID-65535)  
  读出来的时候判断是否是负数,如果为负,则程序转换回去。  
   
  今天放一下分,看能否成功,前两次都不成功.

楼主啊,看了你最后一个回复后,我无语了……  
  看来你还是没弄明白整数在计算机中的保存方式啊。  
  如果用两个字节来表示带符号整数的话,它只能表示-32768~32767这个范围了(一共65536个不同的值),你的问题还是解决不掉的。

posted @ 2008-10-14 16:36 delphi2007 阅读(271) | 评论 (0)编辑 收藏

新手+菜鸟,请教关于取当天日期的问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061220153528104.html
我想让DateTimePicker.Date的值等于当天的日期  
  我的写法如下:  
              DateTimePicker.Date:=FormatDateTime('yyyy-mm-dd',Now);  
  结果不对,请教高手!

这个问题不需要问高手,小弟来回答:  
   
    DateTimePicker.Date:=FormatDateTime('yyyy-mm-dd',Now);  
   
  中等号左边是日期型数据,右边是字符型数据.报错是当然的啦.改成:  
   
  DateTimePicker.Date:=Now;   就可以啦.  
   
  分都给我吧,谢谢老兄啦

哈哈   顶楼上的   ~~

呵呵,谢谢春风不语,我自己也解决了,跟你的不太一样,  
  DateTimePicker.DateTime:=FormatDateTime('yyyy-mm-dd',Now);放出来给大家看一下,  
  不过分我照给就是了,呵呵

谢谢了

var  
  strTime:   string;  
   
  strTime   :=   FormatDatetime('yyyy-mm-dd   hh:nn:ss',   now);  
   
  'yyyy-mm-dd   hh:nn:ss'对应   年-月-日   小时:分:秒

小便宜  
  你用什么方法啊,贴上来看看

procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
        DateTimePicker1.DateTime:=strtodatetime(FormatDateTime('yyyy-mm-dd   hh:nn:ss',now));  
        showmessage(datetimetostr(DateTimePicker1.DateTime));  
  end;

楼上让人无语

晕死!

DateTimePicker.Date   :=Date   //只取日期

DateTimePicker.Date   :=Date;   //只取日期  
  DateTimePicker.DateTime   :=now;   //时间  
 

呵呵,真可笑

posted @ 2008-10-14 16:36 delphi2007 阅读(403) | 评论 (0)编辑 收藏

含小数点的字符串转换为数值型 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061220145819105.html
我取了表格控件中的值,DBGRIDEH1.getfootervalue(1,DBGRIDEH1.columns[5]),但其值为字符型,而且是带小数点的字符串,例:‘0.49’,我如何把这个值赋予real型的变量xm

xm:=strToFloat('0.49');

posted @ 2008-10-14 16:36 delphi2007 阅读(719) | 评论 (0)编辑 收藏

按钮凹凸问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061220132759106.html
比如WINDONS自带的写字板,当下B图案,则B图案凹下去,并所选字体为粗体,再按一下,按钮和字体都还原了.

你自己编程也可以实现啊,在按钮的mousedown里写

可以把TSpeedButton或者ToolBor的有关按钮设置成组,GroupIndex=xxx当前按钮的Down=True同组其他按钮就自动弹起来了

如何设组啊?

把SPEEDBUTTON全部放到一个PANEL面板上,就成组啦  
   
 

要的效果并不是同组中一个只有按,而是可以同时按下多个或指按一个,这个问题已经解决了,添加ToolBar1,新建ToolButton1,把ToolButton1的style属性设为tbscheck.

posted @ 2008-10-14 16:36 delphi2007 阅读(210) | 评论 (0)编辑 收藏

想结婚选日子吗?超难的“双八”问题,我没分了,有兴趣的进,很好玩!!! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061220122423107.html
众所周知,前天,也就是公历12.18,农历10.28,在整个北京,结婚的人特别多,晚上八点多,领证的队还排的很长,那么,如何用程序得出过去的几百年和未来的几百年还有哪天是双八呢?请高手示下!!

真没有人会吗?

要有一个农历的表。

算农历么,简单点的用遍历,再复杂点的推到公农历的换算公式。。。。

怎么实现啊,农历怎么算啊,

呵呵,按照地球和月亮的天文轨道数据推导公式

要的话我这里有一个算法,guangzhao@163.com

好玩...呵呵

CruelYoung123(向牛人们学习@HOHO~~~)   (   )   信誉:100     Blog     2006-12-27   10:45:43      
        好玩...呵呵  
   
  感觉是无聊才玩的东西。  
       
     
 

有想法。     将农历表和公历表遍历、比较  
       
  --------------------------------------------------------------  
  程序,犹如人生。  
 

posted @ 2008-10-14 16:36 delphi2007 阅读(82) | 评论 (0)编辑 收藏

仅列出标题
共34页: First 25 26 27 28 29 30 31 32 33 Last