Delphi中DBgid的操作问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi中DBgid的操作问题相关的知识,希望对你有一定的参考价值。

我用的是DBgrid控件,左边的数据是从数据库中获得
我想双击左边grid中的一行数据,该条数据出现在右边grid中,并可以编辑数量单元理得内容(数据编号不能重复)
最后我点击按钮,能将右边grid中的数据保存到数据库中
求大神指导

给个思路吧:

1、新加一个AdoClientdataset和datasource,然后把dbgrid2连接至AdoClientdataset和datasource,把AdoClientdataset的locktype属性改为ltBatchOptimistic(缓存更新模式)。然后双击AdoClientdataset,把你需要的字段全部添加到列表中


2、在程序启动时,初始化AdoClientdataset,执行AdoClientdataset.CreateDataSet ;


3、在dbgrid1的双击事件中添加代码:


procedure TForm1.dbgrd1DblClick(Sender: TObject);

var i,j : Integer ;

begin

    AdoClientdataset1.Append ;

    for i := 0 to dbgrd1.Columns.Count-1 do

    begin

       for j := 0 to AdoClientdataset1.Fields.Count-1 do

       begin

           if dbgrd1.Columns[i].FieldName=dst1.Fields[j].FieldName then

           begin

              AdoClientdataset1.Fields[j].Value := dbgrd1.Fields[i].Text ;

           end;

       end;

    end;

    dst1.Post ;

end;


本人测试过,可以实现


参考技术A DBGrid是数据感知控件,不知道你右边网格用的是DBGrid还是其他的,用DBGrid做不到你想要的效果。我觉得简单的做法就是选择左边的网格一条记录,点击一个 修改按钮 ,弹出一个修改信息的窗口 这样比较要操作吧。想你说的在右边的网格中编辑,那项目编号要不要编辑呢?如果输入编号不对还要加判断,这样感觉比较繁琐。 参考技术B 先获取单击的内容吗?像dbgrid.field[0].asstring,其它应该会吧

Delphi Prism 中的操作系统指令

【中文标题】Delphi Prism 中的操作系统指令【英文标题】:Operating System Directive in Delphi Prism 【发布时间】:2011-08-23 13:01:37 【问题描述】:

由于我正在编写一个最终将在从相同项目文件编译的 Windows 和 Linux 环境中运行的程序,因此我想测试一下操作系统指令的性能如何。所以,我写了一个示例代码。代码似乎意外运行,或者只是我的想象。

代码如下:

method MainForm.ControlBtn_Click(sender: System.Object; e: System.EventArgs);
begin
  $IFDEF linux
    MessageBox.Show('This is Linux. Horay!!!', 'mypro',MessageBoxButtons.yesno);
  $ENDIF

  $IFDEF WIN32
    MessageBox.Show('This is Win32. Horay!!!', 'mypro',MessageBoxButtons.yesno);
  $ENDIF

  $IFDEF CLR
    MessageBox.Show('This is .NET Framework. Horay!!!', 'mypro',MessageBoxButtons.yesno);
  $ENDIF
end;

现在,当我在 Windows 上运行此方法时,它会弹出一个消息框,其中包含“这是 .NET Framework。万岁!!!'我有点期待它在 Windows 上运行。当我在 Mono 下的 Linux 上运行它时,它会弹出一个带有相同消息的消息框,“这是 .NET FrameWork。万岁!!!”我期待看到 Linux 消息,即“这是 Linux。万岁!!!”如果此代码工作正常,那么如果您确实需要执行仅受 Linux 或 Mac 或 windows 支持的不同方法,您如何检查您的程序在哪个平台上运行。

【问题讨论】:

【参考方案1】:

编译器指令在编译时进行评估(因此编译器指令)。因此,生成的 .exe 将始终说明它是在哪个平台上编译的,而不是它正在运行的平台。此外,对于 Prism / Oxygene 语言,Delphi-Compiler 指令没有以这种方式定义。

检索您正在运行的操作系统的方法有点棘手(例如,有多个值表明您在 UNIX 上),但并不过分复杂。

第一个去的地方是System.Environment.OSVersion.Platform。 此枚举在 .NET 2.0 中定义以下值:Win32S, Win32Windows, Win32NT, WinCE, Unix, Xbox, MacOSX。 MacOS 有自己的价值,而 Linux 和其他 Unixoid 系统共享 Unix 的价值。

Mono 还定义了其他值(参见Mono FAQ entry 确定平台)。

编辑:一种可能的方法是:

var os: string := if Environment.OSVersion.Platform = System.PlatformID.Unix then
   'Linux/Unix'
else if Environment.OSVersion.Platform = System.PlatformID.MacOSX then
   'Mac OS X'
else
   'Windows';

【讨论】:

以上是关于Delphi中DBgid的操作问题的主要内容,如果未能解决你的问题,请参考以下文章

Delphi 如何与 Detours 库互操作?

delphi编程中的问题

delphi XE6 进行android开发关于真机使用EDIT或者MEMO出现假死重启问题。

关于delphi中照片显示的问题

DELPHI中在对目录、文件中的问题

delphi中的dbgrid数据操作