: 29)

如何操作数据库

unit Q7;

interface

  uses Classes, SysUtils, DB{使用TDataSet对象必须引用此单元};

procedure Main(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);

implementation

{

拼接SQL注意,以MSSQL为例,假设SQL语句为: SELECT * FROM Table WHERE Name=’xxx’

则在Pascal中字符表示为: S := ‘SELECT * FROM Table WHERE Name=”xxx”’;  

                       S := ‘SELECT * FROM Table WHERE Name=”’ + Player.Name + ””;

                       两个单引号来表示SQL中的一个单引号

}

procedure Main(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);

var

  ADataSet: TDataSet;

  AList: TStrings;

begin

  //普通执行语句不需要返回

  Gamelib.DBEngine.ExecSQL(‘HumDB’, ‘UPDATE Players SET nGold=0 WHERE nGold < 0’);     

  Gamelib.DBEngine.ExecSQL(‘HumDB’, ‘UPDATE Players SET nGold=10000 WHERE sChrName=”’ + Player.Name+ ””); //这里需要注意引号的使用

  //查询数据并将结果放到数据集,然后从数据集读取数据

  ADataSet := Gamelib.DBEngine.Query(‘HumDB’, ‘SELECT * FROM Players’);

  if ADataSet <> nil then //必须做此判断,因为当数据连接找不到的时候返回为nil值

  begin

    AList := TStringList.Create;

    try      

      ADataSet.Open; //打开数据集  

      if not ADataSet.IsEmpty then //如果数据集不为空的情况下

      begin

        while not ADataSet.Eof do //如果没到数据集的末尾

        begin

          //S := ADataSet.FieldByName(‘sChrName’).AsString; //直接将字段赋值到变量S中         

          AList.Add(ADataSet.FieldByName(‘sChrName’).AsString);  //将字段sChrName的值取出来放到AList中

          ADataSet.Next; //数据集向后滚动,如果循环读取数据,此处必须,否则会挂循环

        end;   

      end;

      Npc.MessageBox(Player, AList.Text);

    finally

      ADataSet.Free;  //数据集需要自己手工释放

      AList.Free; //自己创建的TStrings类对象需要释放

    end;

  end;  

  //直接将一个查询结果中的第一个字段的值填入到一个TStrings

  AList := Gamelib.DBEngine.ValueList(‘HumDB’, ‘SELECT sChrName FROM Players’);  //ValueList函数一定会返回一个TStrings实例,并且需要自己释放

  Npc.MessageBox(Player, AList.Text);

  AList.Free;

end;

end.

注意:操作SQLite数据库的时候需要注意对应的数据库文件是否被其他应用打开,如果被其他应用打开则只是只读状态,增删改等操作是无效的。比如正在被使用中的示范版本的角色数据库和账号数据库

声明:本站所有文章,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们(hljlife@vip.qq.com)进行处理。

本站所有资源来源于网络,本站未参与任何dump或hack活动。若有侵犯您的权益请提供相关证明致邮hljlife@vip.qq.com,我将及时撤下该资源。

All resources come from the network, this site does not participate in any dump or hack activities, if there is any violation of your rights, please provide relevant proof and email hljlife@vip.qq.com, I will promptly delete it.

如果下载资源文件后缀为.PDF,请删除后缀.PDF之后运行。

部分失效链接可通过文末填写有效邮箱到Email输入框留言索取。

免责声明:游戏资源均来自网络收集购买,不保证BUG,不保证病毒,不解答游戏问题(传奇服务端提供付费架设服务),为了安全,请尽量选择虚拟机运行服务端。