Portal SAMP
[Ajuda] Retornar valor - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Retornar valor (/showthread.php?tid=4775)



Retornar valor - Biggy - 18/05/2024

Olá boa noite, gostaria de solicitar ajuda sobre algo que não estou conseguindo resolver.

Eu quero puxar um dado da base de dados para a minha TextDraw, porém está retornando um valor mas nada haver com aquele que eu quero.

Eu fiz o seguinte código. Podem me ajudar ou dar sugestões de como eu poderei resolver?? 

Obrigado desde já! 

Código:
CMD:concesf(playerid,params[])
{
    if(IsPlayerInRangeOfPoint(playerid, 2.0,-1949.7532,260.7777,35.4688))
    {
        if(PlayerInfo[playerid][pDonoemp] == 1 || PlayerInfo[playerid][pSubemp] == 1)
        {
            new emp, money, query[128];
             new cofreemp[32];
             mysql_format(Conecction, query, sizeof(query),  "SELECT * FROM `empresas` WHERE `money` = '%d' AND `ID` = '2'", money);
             mysql_tquery(Conecction, query, "CargarEmp", "i", playerid);
            format(cofreemp, sizeof(cofreemp), "R$: %d", money);
            TextDrawSetString(ConceTD[8], cofreemp);
            TextDrawShowForPlayer(playerid, ConceTD[8]);
            }
    }
    return 1;
}

Código:
forward CargarEmp(resultid, extraid, ConnectionHandle);
public CargarEmp(resultid, extraid, ConnectionHandle)
{
    new Rows, Field;
    if(resultid != 0)
    {
        cache_get_data(Rows, Field);
    }
    switch(resultid)
    {
        case 3:
        {
            for( new i = 0; i < Rows; i++ )
            {
                new content[29];
                cache_get_field_content(i, "id", content);                EmpresaInfo[i][eID] = strval(content);

                cache_get_field_content(i, "nome", content);            strmid(EmpresaInfo[i][eNome],  content, 0, strlen(content), 32);
                cache_get_field_content(i, "dono", content);            strmid(EmpresaInfo[i][eDono],  content, 0, strlen(content), 32);
                cache_get_field_content(i, "sub", content);             strmid(EmpresaInfo[i][eSub], content, 0, strlen(content), 32);

                cache_get_field_content(i, "stock", content);             EmpresaInfo[i][eStock] = strval(content);
                cache_get_field_content(i, "money", content);             EmpresaInfo[i][eDinheiro] = strval(content);
                cache_get_field_content(i, "ganhos", content);             EmpresaInfo[i][eGanhos] = strval(content);
                cache_get_field_content(i, "gastos", content);             EmpresaInfo[i][eGastos] = strval(content);
                cache_get_field_content(i, "entrega", content);             EmpresaInfo[i][eEntrega] = strval(content);
            }
        }
    }
    return 1;
}



RE: Retornar valor - xbruno1000x - 18/05/2024

Essa query está incorreta. Você quer pegar o dinheiro, mas está buscando todos os atributos, o que é desnecessário. Além disso está usando uma variável(money) sem valor atribuído como condição para encontrar o resultado. Nessa query está sendo buscado todas as empresas com dinheiro 0 e id 2. Na clausula Where o id 2 bastaria. Depois você está formatando a variável money sem nenhum valor atribuído a ela e exibindo na textdraw.


Recomendo que dê uma olhada no script de exemplo do MySQL SA-MP, lá tem a resposta pro seu problema:
https://github.com/pBlueG/SA-MP-MySQL/blob/master/example_scripts/login_system-cache.pwn#L312

Dê uma olhada na função AssignPlayerData e vai entender melhor como funciona a recuperação de dados persistidos.


RE: Retornar valor - Biggy - 19/05/2024

(18/05/2024 22:37)xbruno1000x Escreveu: Essa query está incorreta. Você quer pegar o dinheiro, mas está buscando todos os atributos, o que é desnecessário. Além disso está usando uma variável(money) sem valor atribuído como condição para encontrar o resultado. Nessa query está sendo buscado todas as empresas com dinheiro 0 e id 2. Na clausula Where o id 2 bastaria. Depois você está formatando a variável money sem nenhum valor atribuído a ela e exibindo na textdraw.


Recomendo que dê uma olhada no script de exemplo do MySQL SA-MP, lá tem a resposta pro seu problema:
https://github.com/pBlueG/SA-MP-MySQL/blob/master/example_scripts/login_system-cache.pwn#L312

Dê uma olhada na função AssignPlayerData e vai entender melhor como funciona a recuperação de dados persistidos.

Obrigado pela resposta, estive rodando aqui várias horas e tentando várias soluções mas sem sucesso.

Notei que modificando a seguinte linha 

Disso:
Código:
format(cofreemp, sizeof(cofreemp), "R$: %d", money);

Para:

Código:
format(cofreemp, sizeof(cofreemp), "R$: %d", EmpresaInfo[emp][eDinheiro]);

Vou exatamente buscar o valor que eu pretendia quando coloquei a public CargarEmp(resultid, extraid, ConnectionHandle) iniciando com o servidor tal como a função AssignPlayerData que mencionou em cima.

O meu problema agora é que o valor retornado do mysql é sempre da linha ID 1, sendo que o meu objetivo é receber esse mesmo dado mas do ID que eu quisesse.

Do mesmo jeito que consegui puxar o valor através da EmpresaInfo[emp][eDinheiro] tentei usar o if(EmpresaInfo[emp][eID] == 2) para tentar ir buscar outra linha mas como ele só verifica a linha 1, não retorna.


RE: Retornar valor - Biggy - 19/05/2024

Resolvido! Com Switch para puxar o id 2.

Obrigado bruno

Código:
switch(EmpresaInfo[i][eID])
{
        case 2:
        {
          format(cofreemp, sizeof(cofreemp), "R$: %d", EmpresaInfo[i][eDinheiro]);
        }
}



RE: Retornar valor - xbruno1000x - 19/05/2024

Você pode fazer melhor ainda e usar diretamente assim:

Código:
format(cofreemp, sizeof(cofreemp), "R$: %d", EmpresaInfo[2][eDinheiro]);