Forums » 3D Game Builder

Tutorial 15 – Oficial – Acessando um Banco de Dados

    • 466 posts
    19 de setembro de 2012 20:54:54 ART

    TUTORIAL 15 - ACESSANDO UM BANCO DE DADOS

            Neste tutorial aprenderemos como acessar um banco de dados “Access”, ler e gravar dados nele, usando a linguagem script do 3D Game Builder.

            Primeiramente faça o download do seguinte arquivo:

            http://www.eternix.com.br/pt/3dgamebuilder/bd_exemplo.zip

          Salve o arquivo em “C:\”. Este arquivo é um banco de dados “Access” com apenas uma tabela chamada de ator e que possui 3 campos:

          Id = Integer
          Nome = String
          Energia = Integer

          Agora crie um novo projeto ou utilize um dos criados anteriormente, e crie também um cenário e adicione a este cenário um Ator MD2, este pode ser o ator padrão do 3D Game Builder. Crie também um pequeno formulário, com um campo onde será digitado um novo nome para o ator, utilize os objetos do tipo “GUI Objects”, na parte superior da tela adicione também dois “Labels” como mostrado na imagem abaixo.

          Após concluir o cenário deve estar parecido com este:

          Agora vamos criar um script de leitura de dados, quando o mapa for carregado devemos ler os dados da tabela “ator”. Para isso acesse o menu “Mapas -> Eventos -> OnCreate”, o script para a leitura do nome ficou assim:

          var Conn: TADOConnection;
          var DataSet: TADODataset;

          Conn:=TADOConnection.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\bd_exemplo.mdb;');

    DataSet:=Conn.Execute('select nome, energia from ator where id = 0');

          if DataSet.RecordCount <> 0 then
          begin
              SetLabelText('Objeto3', 'Nome:'+DataSet.FieldAsString[0]);
              SetLabelText('Objeto2', 'Energia: '+DataSet.FieldAsString[1]);
          end;

          HideObject('Objeto5');
          HideObject('Objeto6');
          HideObject('Objeto7');
          HideObject('Objeto8');

          WriteGlobalVar('EditarNome', 0);

          DataSet.free;
          Conn.free;

          Lembre-se que “Objeto2” e “Objeto3” são os nomes dos meus objetos do tipo “Label” que estão na parte superior da tela, caso os seus possuam outro nome, altere o script para o nome dos seus objeto, ou então altere o nome dos seus objetos no mapa para os respectivos nomes. E os nomes “Objeto5”, “Objeto6”, “Objeto7” e “Objeto8” são referentes aos outros objetos do tipo “GUI Objects” que formam o formulário de alteração do nome.

          Agora vamos à explicação de cada uma das linhas do script.

          var Conn: TADOConnection;

    (Declara um objeto do tipo “TADOConnection”, ele é responsável pela conexão com o banco de dados)

          var DataSet: TADODataset;

    (Declara um objeto do tipo “TADODataSet”, ele é responsável por utilizar os dados provenientes da conexão)

          Conn:=TADOConnection.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\bd_exemplo.mdb;');

    (Cria o objeto “Conn” definindo a String de conexão com o banco de dados, esta string de conexão é a mesma utilizada pelos objetos da paleta “ADO” ou “DBGo” do Delphi, no exemplo utilizei o provider “Microsoft.Jet.OLEDV.4.0” e o caminho para o arquivo no parâmetro “Data Source”, existem outros parâmetros que podem ser utilizados, como por exemplo o usuário e senha do banco, para saber mais sobre estes parâmetro consulte a ajuda do Delphi ou algum outro documento disponível na internet)

          DataSet:=Conn.Execute('select nome, energia from ator where id = 0');

    (Inicializa o objeto “DataSet” definindo a String do comando SQL que será executado pelo objeto “Conn” no banco de dados, no comando SQL é selecionado o campo “nome” e “energia” do registro com o “id = 0” da tabela ator)

          if DataSet.RecordCount <> 0 then

    (Caso a consulta tenha retornado algum registro para o “DataSet”)

          SetLabelText('Objeto3', 'Nome:'+DataSet.FieldAsString[0]);

    (Utiliza o comando “SetLabelText” para alterar o texto do objeto do tipo “Label” de nome “Objeto3” colocando como texto a string “Nome:” mais o valor do registro convertido em String na posição 0 do “DataSet”)

          SetLabelText('Objeto2', 'Energia: '+DataSet.FieldAsString[1]);

    (Utiliza o comando “SetLabelText” para alterar o texto do objeto do tipo “Label” de nome “Objeto2” colocando como texto a string “Energia:” mais o valor do registro convertido em String na posição 1 do “DataSet”)

          HideObject('Objeto5');
          HideObject('Objeto6');
          HideObject('Objeto7');
          HideObject('Objeto8');

    (O comando “HideObject” torna um objeto invisível, isto é feito para que o formulário para alteração do nome não esteja visível quando o jogo for iniciado, e os meus objetos “Objeto5”, “Objeto6”, “Objeto7” e “Objeto8” são os objetos que formam o formulário)

          WriteGlobalVar('EditarNome', 0);

    (Cria uma variável global para ser utilizada como controle do formulario visível ou não visível)

          DataSet.free;

    (Destrói o objeto “DataSet” liberando-o do da memória)

          Conn.free;

    (Destrói o objeto “Conn” liberando-o do da memória)

          Salve o script e agora vamos criar o script para alterar o valor do nome no banco, para isso selecione o botão “Salvar” do seu formulário, e acesse a aba “eventos” nas propriedades do objeto, e clique no evento “OnInteract” este evento ocorrerá no momento que o botão for clicado pelo mouse.

          O script para gravação de dados ficou assim:

          var Conn: TADOConnection;

          Conn:=TADOConnection.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\bd_exemplo.mdb;');

          Conn.ExecuteSQL('update ator set nome = ' + QuotedStr(GetEditText('Objeto7')) + ' where id = 0');

          Conn.Close;

          SetLabelText('Objeto3', 'Nome: '+GetEditText('Objeto7'));

          HideObject('Objeto5');
          HideObject('Objeto6');
          HideObject('Objeto7');
          HideObject('Objeto8');

          Conn.Free;

          Lembre-se que “Objeto7” é o nome do meu objeto do tipo “Edit” onde o jogador irá escrever o novo nome, e o “Objeto3” é o “Label” onde aparece o nome que está na parte superior da tela, caso os seus possuam outro nome, altere o script para o nome dos seus objetos, ou então altere o nome dos seus objetos no mapa para os respectivos nomes. E os nomes “Objeto5”, “Objeto6”, “Objeto7” e “Objeto8” são referentes aos outros objetos do tipo “GUI Objects” que formam o formulário de alteração do nome.

          Agora vamos para a explicação de cada uma das linhas:

          var Conn: TADOConnection;

    (Declara um objeto do tipo “TADOConnection”, ele é responsável pela conexão com o banco de dados)

          Conn:=TADOConnection.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\bd_exemplo.mdb;');

    (Cria o objeto “Conn” definindo a String de conexão com o banco de dados assim como foi explicado anteriormente)

          Conn.ExecuteSQL('update ator set nome = ' +  QuotedStr(GetEditText('Objeto7')) + ' where id = 0');

    (Utiliza a conexão para executar um comando SQL de update para alterar o valor de “nome” do registro com o “id=0” para o valor que estiver no texto do “Objeto7” que é o objeto do tipo “Edit” que esta no formulario)

          Conn.Close;

    (Fecha a conexão com o banco de dados)

          SetLabelText('Objeto3', 'Nome: '+GetEditText('Objeto7'));

    (Utiliza o comando “SetLabelText” para alterar o texto do objeto do tipo “Label” de nome “Objeto3” colocando como texto o texto que estiver no “Edit” do formulário”)

          HideObject('Objeto5');
          HideObject('Objeto6');
          HideObject('Objeto7');
          HideObject('Objeto8');

    (O comando “HideObject” torna um objeto invisível, isto é feito para que o formulário para alteração do nome não esteja visível quando o jogo for iniciado, e os meus objetos “Objeto5”, “Objeto6”, “Objeto7” e “Objeto8” são os objetos que formam o formulário)

          Conn.free;

    (Destrói o objeto “Conn” liberando-o do da memória)

          Agora precisamos exibir o formulário para a alteração do nome, já que ele é tornado invisível na criação do mapa, para isto selecione o ator que foi colocado anteriormente no mapa, e vá até o seu evento “OnCollision”, quando o ator principal tocar no outro ator o formulário de alteração de nome será exibido.

          O script para exibir o formulário ficou assim:

          if ReadGlobalVar('EditarNome') = 0 then
          begin
              WriteGlobalVar('EditarNome', 1);
              ShowObject('Objeto5');
              ShowObject('Objeto6');
              ShowObject('Objeto7');
              ShowObject('Objeto8');
          end;

          Lembre-se que os nomes “Objeto5”, “Objeto6”, “Objeto7” e “Objeto8” são referentes aos objetos do tipo “GUI Objects” que formam o formulário de alteração do nome, caso os seus possuam outro nome, altere o script para o nome dos seus objetos.

          Agora vamos à explicação do script:

          if ReadGlobalVar('EditarNome') = 0 then

    (É utilizado o comando “ReadGlogalVar” para ler o valor da variável “EditarNome” para saber se o formulário de edição de nomes já não esta visível, caso na esteja ele deverá ser exibido)

          WriteGlobalVar('EditarNome', 1);

    (Altera o valor da variável global “EditarNome” para 1, isto significa que o formulário de edição do nome já esta visivel)

          ShowObject('Objeto5');
          ShowObject('Objeto6');
          ShowObject('Objeto7');
          ShowObject('Objeto8');

    (O comando “ShowObject” torna um objeto visível, e os objetos “Objeto5”, “Objeto6”, “Objeto7” e “Objeto8” são os objetos que formam o formulário)

          Se você fez tudo corretamente esta pronto o seu acesso de leitura e gravação no banco de dados, então execute o projeto para ver o resultado.

          Como você pode notar acessar um banco de dados não é uma coisa muito complexa, é possível utilizar o banco de dados para diversas tarefas como para salvar o jogo, salvar o estado dos atores e dos objetos do mapa, para criar agentes que aprendem no decorrer do jogo, entre outras possibilidades. Este tutorial mostrou como acessar um banco de dados “Access”, mas também é possível acessar outros formatos de banco, como o Firebird, SQLServer, entre outros. E também é possível acessa o banco sem utilizar a string de conexão, basta criar um “Alias” para o banco e utilizar este “Alias” no lugar da string de conexão. Nos próximos tutoriais aprenderemos a fazer outras coisas utilizando a linguagem scripts.

     

     

    Créditos: Retirado do Site Oficial: http://www.3dgamebuilder.com.br