Autor Tópico: [RESOLVIDO] Erro com sc_exec_sql  (Lida 2354 vezes)

Carlosedgi

  • Intermediário
  • ***
  • Mensagens: 147
    • Email
[RESOLVIDO] Erro com sc_exec_sql
« Online: Agosto 02, 2016, 01:42:09 pm »
Pessoal, mais um erro estranho...

Eu estou pegando informações de um arquivo css para poder importar para um banco MySQL... parece que estou tendo problemas em importar decimais...

O arquivo CSS está assim:

ELEMENTAR,PRECO
"00001","54"
"00002","7.35"
"00003","7.969"
"00004","3.616"
"00005","6.41"
"00006","8.98"
"00007","1.829"

Eu ajustei o programa para não ler a primeira linha, do cabeçalho...

Os dados estão chegando ok, conforme observamos no código:

$handle = fopen($uploadfile,"r");

while (($data = fgetcsv($handle,1000,",",'"')) !== FALSE)
{
    if(trim($data[0])!="ELEMENTAR")
    {   
        $insert_sql = "INSERT INTO tb_emop_elementar (emel_tx_versao, emel_tx_elementar, emel_vl_preco) VALUES ('".$tx_versao."','" . $data[0] . "'," . $data[1].");";

       //$uploadfile e $tx_versão referen-se, respectivamente, ao nome do arquivo csv e a versão dele
                  
        sc_exec_sql($insert_sql);
    }         
}

O sql fica assim: INSERT INTO tb_emop_elementar (emel_tx_versao, emel_tx_elementar, emel_vl_preco) VALUES ('0416','00001',54);

Acontece que quando eu jogo isso direto no banco mysql o código funciona normalmente, mas por dentro do ScriptCase, não!
Ele só funciona se eu RETIRAR emel_vl_preco e o seu valor da string SQL... muito louco isso... já tentei colocar o valor entre aspas simples, tudo em aspas duplas, os dados de texto em aspas duplas, etc... o banco, no campo emel_vl_preco está como decimal (21,4) ou seja, está com 4 casas decimais... eu vou precisar completar as 4 casas decimais??? Já tentei também colocar a formatação de número com vírgula e, claro, deu erro...

Será um bug do scriptcase ou eu que estou ficando maluco?
« Última modificação: Agosto 03, 2016, 07:53:11 am por Ronyan Alves »

Jailton

  • Expert
  • *****
  • Mensagens: 2729
Re:Erro com sc_exec_sql
« Responder #1 Online: Agosto 02, 2016, 01:55:10 pm »
Veja se ele esta montando a string de insert Corretamente:

while (($data = fgetcsv($handle,1000,",",'"')) !== FALSE)
{
    if(trim($data[0])!="ELEMENTAR")
    {   
        $insert_sql = "INSERT INTO tb_emop_elementar (emel_tx_versao, emel_tx_elementar, emel_vl_preco) VALUES ('".$tx_versao."','" . $data[0] . "'," . $data[1].");";

        echo 'SQL = '.$insert_sql."<BR>";

       //$uploadfile e $tx_versão referen-se, respectivamente, ao nome do arquivo csv e a versão dele
                 
        // sc_exec_sql($insert_sql);
    }         
}

break;
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Carlosedgi

  • Intermediário
  • ***
  • Mensagens: 147
    • Email
Re:Erro com sc_exec_sql
« Responder #2 Online: Agosto 02, 2016, 02:24:30 pm »
A sql estava sendo gerada certinha sim... já tinha visto... mandei um number_format($vl_preco,4,'.','') e joguei o valor de $data[1] assim: $vl_preco=$data[1]; agora está falando que eu estou usando number_format em uma variável que não é de número... mas o insert funcionou... vou ver o que faço agora pra essa mensagem sumir da tela... agora eu não entendi o porque da macro sc_exec_sql me OBRIGAR a inserir os dados com 4 casas decimais... muito louco isso... não deveria funcionar assim, penso...

Carlosedgi

  • Intermediário
  • ***
  • Mensagens: 147
    • Email
Re:Erro com sc_exec_sql
« Responder #3 Online: Agosto 02, 2016, 02:41:42 pm »
Ainda tive que dar um floatval na variável... ficou assim:

$handle = fopen($uploadfile,"r");

while (($data = fgetcsv($handle,1000,",",'"')) !== FALSE)
{

    $tx_elementar=$data[0];
    $vl_preco=floatval($data[1]);

    $insert_sql = "INSERT INTO
                             tb_emop_elementar 
                             (emel_tx_versao,
                             emel_tx_elementar,
              emel_vl_preco)
         VALUES
              ('".$tx_versao."','".
              $tx_elementar . "'," .
              number_format($vl_preco,4,'.','') .
              ");";

    sc_exec_sql($insert_sql);
    sc_commit_trans();       

}


Não entendi o porque disso não, mas tudo bem...

Jailton

  • Expert
  • *****
  • Mensagens: 2729
Re:Erro com sc_exec_sql
« Responder #4 Online: Agosto 02, 2016, 03:18:59 pm »
Usa a conexão PDO também, ela normaliza os dados para o SGDB.
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Carlosedgi

  • Intermediário
  • ***
  • Mensagens: 147
    • Email
Re:Erro com sc_exec_sql
« Responder #5 Online: Agosto 02, 2016, 04:19:41 pm »
Fui até dar uma conferida... estou usando PDO... uso normalmente assim...

Kleyber

  • Expert
  • *****
  • Mensagens: 3134
    • TK Informídia
Re:[RESOLVIDO] Erro com sc_exec_sql
« Responder #6 Online: Agosto 05, 2016, 08:05:21 am »
Carlos,

Ao que parece na hora de gerar o comando INSERT, os valores estão sendo considerados como INTEIROS, não pegando a parte decimal. Experimente criar uma variável com o valor que deseja e coloque no INSERT.
Kleyber Derick

ITIL® V3 Foundation Certified
Analista de Sistemas
São Luís - Maranhão