不知道一些网络游戏的数据库是如何设计的。
我目前的想法是多个表来存储玩家的数据。分别有基本数据,技能数据,物品数据
如下的 TCharData 定义假设为人物的数据结构:  //物品数据
  TItemData = record
    Name : String[20];
    Count : Integer;
    UpGrade : Byte;
    MaxDurability : Word;
    CurDurability : Word;
  end;
  //技能数据
  TMagicData = record
    Name : String[20];
    Level : Byte;
    Exp : Integer;
  end;
  //人物数据
  TCharData = record
    Name : String[20];
    LastDate : String[12];
    CreateDate : String[12];
    Sex : Byte;
    MapId : byte;
    Mapx : word;
    Mapy : word;
    MaxLife : Integer;
    CurLife : Integer;
    MaxMagic : Integer;
    CurMagic : Integer;
    //背包物品
    HaveItem : array [0..30 - 1] of TItemData;
    //技能数据
    HaveMagic : array [0..20 - 1] of TMagicData;
  end;
MSSQL 数据表设计:
Char_Basic 表(人物的基本数据)字段:
ID
Name
LastDate
CreateDate
Sex
...Item_Data 表 字段:
ID
Char_ID           //这个对应 Char_Basic 表的ID
Pos               //这个表示人物的第几个物品框
Name
Count
UpGrade
MaxDurability
CurDurabilityMagic_Data 表 字段:
ID
Char_ID          //这个对应 Char_Basic 表的ID
Pos              //这个表示人物的第几个技能
Name
CurLevel
Exp
请问:Delphi 如何通过SQL语句将数据里的数据读取到 TCharData 结构中 和 将 TCharData 结构的数据分别写入几个表内  with ADOQuery do
  begin
    Sql.Clear;
    SQL.Add(?????);
  end;

解决方案 »

  1.   

    sql语句做不到,需要你取出数据,写入你自己的结构,反之依然
      

  2.   

    就是想知道如何从多个表内读取数据。
    比如一个表的:  Str := 'select * from [Char_Basic] where Name = ''' + szCharName+ ''';';
      with ADOQuery do
      begin
        Close;
        Sql.Clear;
        SQL.Add(Str);
        Open;
      end;
      CharData.LastDate := Copy (DateToStr(ADOQuery.FieldByName('LastDate').AsDateTime), 1, 12);
      CharData.MaxMagic := ADOQuery.FieldByName('MaxMagic').AsInteger;但是物品和技能的数据在其他的表。难道要 重新读另一个表?如何读完一个表再读另一个的话。效率如何?
      

  3.   

    联合查询
    select a.LastDate, b.MaxMagic  from Char_Basic a, Item_Data b 
    where a.id = 5 and b.id = 5 
      

  4.   

    很普通啊
    分几个sql读取,分别用程序把不同记录-字段的值赋给不同的结构-域
    写就是 反向生成几个sql语句,可以一次性提交不过,如果由我来设计,我会把这些不同性质的属性放到一个大 name-value 表
    在程序里,也是一个大 Tstringlist 好了
    扩展性会无限
      

  5.   

    对SQL实在太陌生了。SQL都不怎么写得来