登录
×
  • 首页
  • 传奇论坛
  • 传奇版本库
  • 传奇服务端
  • 传奇三端手游
  • 传奇素材网
  • 传奇客户端
  • 引擎登录器
  • 下载排行
  • 获取邀请码
  • 搜索
    传奇素材网
    142813

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

     火... [复制链接]

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

     火... [复制链接]
    趣游论坛

    1万

    主题

    28

    回帖

    11万

    积分

    管理员

    积分
    112330

    灌水之王活跃会员突出贡献优秀版主荣誉管理论坛元老

    趣游论坛 2019-5-12 18:50:38 / 显示全部楼层 /阅读模式
    142813
    20190512183934.png

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


    回复

    使用道具 举报

    太执着

    0

    主题

    4808

    回帖

    1万

    积分

    年VIP会员

    积分
    11602
    太执着 2024-7-26 23:40:58 / 显示全部楼层
    回复 支持 反对

    使用道具 举报

    太执着

    0

    主题

    4808

    回帖

    1万

    积分

    年VIP会员

    积分
    11602
    太执着 2024-9-1 18:54:33 / 显示全部楼层
    回复 支持 反对

    使用道具 举报

    kaichen

    0

    主题

    92

    回帖

    625

    积分

    注册用户

    积分
    625
    kaichen 前天 16:57 / 显示全部楼层
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    扫一扫加群沟通交流

    首页 论坛 !mobpost! 最新 我的