设为首页收藏本站★元宝充值★★购买会员★★传奇QQ群★

一休论坛

网络广告风险自担
 找回密码
 立即注册
查看: 98|回复: 0

[91M2引擎] 91M2引擎如何操作数据库 77M2引擎数据库修改难吗?

[复制链接]
  • TA的每日心情
    慵懒
    2018-8-5 17:14
  • 签到天数: 49 天

    [LV.5]常住居民I

    发表于 2019-5-13 20:26:47 | 显示全部楼层 |阅读模式
    网络广告风险自担
    网络广告风险自担
    91M2引擎如何操作数据库 77M2引擎数据库修改难吗?

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




    上一篇:77M2引擎的版本中如何修改一个物品的属性脚本分享
    下一篇:BLUE引擎经验倍数无效,双倍经验下线保存的方法
    回复

    举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    网络广告风险自担

    网络广告风险自担
    一休论坛在线客服
    收 起 客 服

    小黑屋|传奇一条龙|GM基地|GM版本库|一休论坛

    GMT+8, 2019-7-24 16:52 , Processed in 0.530401 second(s), 90 queries , Gzip On.

    传奇一条龙 GM基地 版本库 传奇论坛 传奇漏洞论坛 传奇服务端下载 传奇版本

    一休论坛资料来自网络仅供学习交流之用,用于商业后果自负

    快速回复 返回顶部 返回列表