17. 06.

我用ADOCONNECTION连到了excel文件,
我想在DBGrid中显示某个工作表,但是我要怎么知道这个EXCEL文件中有哪些工作表呢?

简单说就是怎么样获取工作表名,
使用ADOCONNECTION,ADOquery,

连接后,可以用ADOConnection1.GetTableNames()试试,能否获得列表,每个sheet就好像是一个table

sl:= tstringlist.create;
ADOConnection1.GetTableNames(sl,true);
showmessage(sl.text);

个人建议用cxGrid 你会发现 方便

学习了

自己写代码实现吧


17. 06.

使用的BDE 是不是说 编程序时文件夹在哪个目录就得安装到哪个目录?如不是,请推荐个安装程序
如是 请问怎么可以 实现安装在哪个文件夹都可以的功能
谢谢

我用的就是肥猫 可是安装到不带DELPHI的机器后 打开文件时显示错误

比如 我的原代码等文件在A电脑的D盘X文件下
我的问题是 是不是 安装到B电脑时 也要安装到 D盘的X文件夹下

如果必须这样的 话 我怎么才能使程序可以安装到 B电脑的 C盘X文件夹下

看你写程序是是否用了绝对路径(就是说调用文件是固定路径的),相对路径不存在你说的问题,bde可以安装到任意目录的
,相对路径例如ExtractFilePath(Application.ExeName);

我用的是绝对路径 
您的意思是 在 FORM CREATE的时候给TABLE等付值?》

引用 3 楼 emp 的回复:
看你写程序是是否用了绝对路径(就是说调用文件是固定路径的),相对路径不存在你说的问题,bde可以安装到任意目录的
,相对路径例如ExtractFilePath(Application.ExeName);

绝对路径,那就要安装到指定的目录了;
相对路径,安装在任何目录下都可以;BDE的连接方式还要配置ODBC才可以,建议选择ADO+相对路径,方便一些。

把绝对路径改成相对路径,不然指定A电脑的D盘X文件下,安装在B电脑,路径要一样的,你用的什么数据库?程序中动态配置数据库,路径用相对路径,就能达到(原代码等文件在A电脑的D盘X文件下
使程序可以安装到 B电脑的 C盘X文件夹下)这个目的
http://www.enet.com.cn/article/2004/0320/A20040320296087.shtml

引用楼主 lzhlovehdm 的帖子:
使用的BDE 是不是说 编程序时文件夹在哪个目录就得安装到哪个目录?如不是,请推荐个安装程序
如是 请问怎么可以 实现安装在哪个文件夹都可以的功能
谢谢

用installshield就可以的,制作安装文件过程中有些设置配好了就行了

使用delphi自带的installshield就可以把bde数据引擎打包,安装在program files目录即可

引用楼主 lzhlovehdm 的帖子:
使用的BDE 是不是说 编程序时文件夹在哪个目录就得安装到哪个目录?如不是,请推荐个安装程序
如是 请问怎么可以 实现安装在哪个文件夹都可以的功能
谢谢

BDE 安裝系統文件夾即可,就不用再考慮路徑的問題了。


17. 06.

比较大的库,用sql server,不是那种小的桌面型的。
是否会利用本地表,效率如何?
如果用,如何将本地表的数据提交到数据库,包括多表提交

一般不会吧?这不是自己给自己增加麻烦吗???

通常不会,可以在服务器上实现为何要用本地表呢

难道大型的数据库的功能还及不上本地表?

没必要,除非你想保留一些个性化的数据

如果不考虑网络不正常的情况,用不到本地数据库

谢各位,我也这么认为。但是无法说服项目负责人,他一定要用本地表,说和数据库交互频繁影响性能
我现在属于知其然不知其所以然,急切需要进一步提高,希望各位有什么好想法说说

引用 7 楼 westuser 的回复:
谢各位,我也这么认为。但是无法说服项目负责人,他一定要用本地表,说和数据库交互频繁影响性能
我现在属于知其然不知其所以然,急切需要进一步提高,希望各位有什么好想法说说

兄弟這誰說得清啊。
項目負責人如果是技術出生就應該有他的確切理由。

如果某些數據量大的基本資料放在本地那肯定效率要高很多。這要看情況的

git为什么好于cvs/svn
但是,也需要看具体的需求:跨地区,有分中心服务器。。。。。。。


16. 06.

DBGridEh 排序之后,每次排序焦点都会自动指定到第一行,排倒序时,焦点会自动跟随第一行到最后。

怎么能让 DBGridEh 排序时 不自动把焦点落到第一行, 或者在排倒序的时候把焦点落到最后一行在排序。

应该是当前排序列的第一行吧.不知你想要怎样.

恩,比如我按标题栏之后,光标在第一行,再按一下之后,光标就到最后一行,DBGridEh 也显示最后的几行。。。

我就是想在排序按下标题按钮时不让DBGridEh自动把焦点放上去。这样DBGridEh就只会只显示最上面的几行,而不是光标在哪里,DBGridEh 就自动跟随显示到哪里。

哪位大哥帮帮小弟

周六也没人?

先取后当前行的主键值,排序之后locate

先取得排序前光标当前字段值
然后
Locate(列名,字段值,[loCaseInsensitive]) ;

对哦,排序后再LOCATE

引用 3 楼 rentiantang520 的回复:
恩,比如我按标题栏之后,光标在第一行,再按一下之后,光标就到最后一行,DBGridEh 也显示最后的几行。。。

我就是想在排序按下标题按钮时不让DBGridEh自动把焦点放上去。这样DBGridEh就只会只显示最上面的几行,而不是光标在哪里,DBGridEh 就自动跟随显示到哪里。

即时用了locate后,你的光标在哪,DBGridEh的焦点也会跟随你的光标

这个无法解决!!你点击了什么控件,那它肯定获得焦点,获得焦点,那它必定停在有记录的头行中

除非程序控制停在某一行上

要么你就要用BookMark,原来停在哪一行就再定位回哪一行


16. 06.

一个bitbtn 一个richedit,一个 opendialog
按钮的单击事件:OpenDialog1.Execute;

opendialog 的filter属性设置:txt|*.txt

我想把打开后的文本导入到richedit中并且richedit只能支持下面的格式

例:
adsflkj544645 adkljwn454

中间的空格为Tab 键!

但说导入是很简单的,直接RichEdit1.Lines.LoadFromFile('文件路径')即可
如果还要限制导入的文本格式,那就先读文本,然后逐行判断是否符合要求,符合则添加
也可以一次性导入到RichEdit,然后逐行删除不符合格式的行

两个richedit,一个用来判断,一个用来显示,如楼上所说

引用楼主 chxgzs 的帖子:
一个bitbtn 一个richedit,一个 opendialog
按钮的单击事件:OpenDialog1.Execute;

opendialog 的filter属性设置:txt|*.txt

我想把打开后的文本导入到richedit中并且richedit只能支持下面的格式

例:
adsflkj544645 adkljwn454

中间的空格为Tab 键!

你這沒什麼格式吧。只是#9 Tab  那你載入時遍曆下不可見字符除了#10#13#9 其它都是非法。

可能是我说的还不够详细吧, 一个 按钮 单击事件 完成 打开文本,指定格式添加到richedit1里面

二楼说的方法也可以,具体实现代码应该如何写呢?


16. 06.

各位大侠,我用 sqlserver语句备份数据库发现一个奇怪问题
语句如下:
qrystr:=' BACKUP DATABASE lsy TO disk='''+tempstr+''''+' with init,stats';

qrystr:='use master restore database lsy from disk='''+tempstr+''''+' with Replace ';
现在的问题是
我将 数据库lsy 备份好后
从数据库lsy 中删除一个表yz
然后恢复数据库,按道理数据库中应有表yz
但是没有,想不通
谢谢

不是

贴完整点的代码
才好分析

首先谢谢您的帮助
procedure Tsjwh.BitBtn1Click(Sender: TObject);
  var qrystr,tempstr:string;
begin
  if trim(bftx1.Text)=''
    then
      begin
        messagebox(handle,pchar('请先输入备份数据库目录!'),pchar('信息!'),64);
        bftx1.SetFocus;
      end
    else
      begin  //1
        qrystr:='';tempstr:='';
        tempstr:=trim(bftx1.Text);
        qrystr:=' BACKUP DATABASE lsy TO disk='''+tempstr+''''+' with init,stats';

        adotemp.Close;
        adotemp.SQL.Clear;
        adotemp.SQL.Add(qrystr);
        try
                  adotemp.ExecSQL;
                  messagebox(handle,pchar('数据库备份成功!'),pchar('信息!'),64);
                except
                  messagebox(handle,pchar('备份数据库失败!'),pchar('信息!'),64);
                end;
      end;//1

end;

procedure Tsjwh.BitBtn3Click(Sender: TObject);
  var qrystr,tempstr,tempstr1:string;
      len:integer;
      kg:integer;
begin
  kg:=0;
  kg:=messagebox(handle,pchar('您确定恢复数据库吗?'),pchar('是否恢复?'),mb_yesNo+mb_iconquestion+mb_defbutton2);

  if kg=6
    then
      begin //  恢复1
  if trim(hftx1.Text)=''
    then
      begin
        messagebox(handle,pchar('请先输入备份数据库的目录!'),pchar('信息!'),64);
        hftx1.SetFocus;
      end
    else
      begin  //1
        qrystr:='';tempstr:='';  tempstr1:='';
        tempstr:=trim(hftx1.Text);
        len:=0;
        len:=length(tempstr)-3;
        tempstr1:=copy(trim(hftx1.Text),len,4);
        if tempstr1 <>'.bak'
          then
            begin  //11
              messagebox(handle,pchar('请输入有效的数据库文件!'),pchar('信息!'),64);
              hftx1.SetFocus;
            end//11
          else
            begin  //22
                tempstr:=trim(hftx1.Text);
                qrystr:='use master restore database lsy from disk='''+tempstr+''''+' with Replace ';
                adotemp.Close;
                adotemp.SQL.Clear;
                adotemp.SQL.Add(qrystr);
                try
                  adotemp.ExecSQL;
                  messagebox(handle,pchar('数据库恢复成功、重新启动程序!'),pchar('信息!'),64);

  main.close;

                except
                  messagebox(handle,pchar('恢复数据库失败!'),pchar('信息!'),64);
                end;

            end;//22

      end;//1
    end;//恢复2

end;


15. 06.

我在使用virtualstringtree控件时,用到了它的指定单元格的edit功能,在createEditor后,进入编辑框内,但是在编辑时我想对键盘输入的字符进行过滤,不能输入类似"/,*,"等字符,该如何往下进行,希望大家多多指教,先谢了!

在你create的Editor的KEYDOWN和CHANGE事件中过滤啊

引用 2 楼 yuyuhaso 的回复:
在你create的Editor的KEYDOWN和CHANGE事件中过滤啊

谢谢楼上,但是创建的editor的keydown事件要自己写吗?我找不到这个。

很显然得要自己写


15. 06.

有没有那个API控制D3D渲染的帧数的?控制画面每秒帧数的…
有知道的朋友麻烦说下,,谢谢了

越多越好…一切相关的API

自己控制用Sleep,或者你建立设备前将D3DPRESENT_PARAMETERS.PresentationInterval设为D3DPRESENT_INTERVAL_ONE,这样每秒的帧数就等于显示器的刷新率,如果你的程序没有画大量的三角形的话。

不是的.~~我是想修改某软件画面每秒的刷新频率…不知道该从哪些API入手…

望指教

这个不懂了。


15. 06.

C#调用代码:
TcpChannel tc= new TcpChannel();
ChannelServices.RegisterChannel(tc);

remoteObject = (MyRemotableObject)Activator.GetObject(typeof(MyRemotableObject), "tcp://localhost:8080/HelloWorld");

textBox2.Text=  remoteObject.SetMessage(textBox1.Text);

DELPHI如何实现调用呀?

知道怎么调用了但是就是报错
INVALID UNICODE CHARACTER!
WS:= (HTTPRIO1 as MyRemotableObjectPortType);
s:=  ws.SetMessage('avshapek');

ws应该是TFMessageWindow型的变量吧

引用 2 楼 czyoooo 的回复:
知道怎么调用了但是就是报错
INVALID UNICODE CHARACTER!
WS:= (HTTPRIO1 as MyRemotableObjectPortType);
s:=  ws.SetMessage('avshapek');

编码不对?

好象是的,怎么处理呀?

好像有老外写了一套组件可以用。


15. 06.

  各位好,我想了解Delphi 未来发展,Delphi2009的以实现怎么样的开发,公司原用Delphi开发,现在要求我们去学C#,说要换开发工具,
真不知道为什么,Delphi的未来如何?我真不想离开这个开发工具,请各位说说吧!

引用 1 楼 luckyrandom 的回复:
若是C/S、桌面APP,DELPHI是王道
若是WEB,另选工具

web开发是趋势,哎,真是个阿斗啊。。。。。。。。。。。

不如此认为
VISTA和WIN7是趋势,那又如何。。。还是有绝大多数客户 <不管是正版还是盗版>在用WINXP
为什么?WIN XP满足客户需求,不仅仅是客户出不起升级VISTA/WIN7的钱

不是一切应用都适合或擅长在WEB里
C/S的应用多过B/S,这应该是现状,甚至未来几十年都如此,再未来就不知道了,世界变化、革命性技术很多

各有各的应用市场,不存在谁是趋势之说

恩,luckyrandom 说的对,未来还是一个求知数,

C/S的确有不如B/S的地方:如直接连数据库,版本更新(应该容易解决),通讯协议不如http(s)通行
但是,改为Client/WebServer,就是集中两者的优点了:
http://blog.csdn.net/sz_haitao/archive/2009/05/15/4190602.aspx

不过,本话题是delphi的前途,如果没有安德森这样的人,估计是很难有起色的了
——连这个问题也解决不了或不屑解决:http://topic.csdn.net/u/20090603/20/a3bc6025-a3da-414a-a43f-96a3aba8490a.html