[Cascavel-pm] Sugestao - Insercao no Banco

Patty Silva ptfzs em yahoo.com.br
Quinta Maio 25 09:57:58 PDT 2006


Igor, essa solucao sugerida

my $query = qq/INSERT INTO TABELA1(Nome, DataHora) values (? , ?) ON DUPLICATE KEY UPDATE ? = ?/;


my $sth = $dbh->prepare($query);
$sth->execute($nome, $data, $variavel, $valor) or warn "Problemas ao executar SQL: ", $dbh->errstr; 

Nao funciona!

Problemas ao executar SQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''END' = 'MINAS'' at line 1 at teste.pl line 109, <FH> line 45.
e assim vai.. para todas as linhas!!


?? pq sera??



Igor Sutton <igor.sutton em gmail.com> escreveu: Seguem comentários:

my %table = (
    "Variavel 1" => "T1r", 
    "Variavel 2"   => "T2r",
    "Variavel 3" => "T3r",
);


$dbh = DBI->connect("DBI:mysql:$DBName",$UserName, $password) || die("Erro de Conexao:$DBI:errstr") ; 

chdir ($caminho) || die "\n *** Erro no diretorio $caminho ***";

for(parse_dir(`ls -ltr`)) 
{
($arquivo) = @$_;

Eu modificaria este trecho de código:


 open(FH, "<$arquivo") or die("Arquivo nao encontrado");
@table = <FH>; 
shift @table; # descarta primeira linha
close(FH);
foreach(@table)  
{

para:
 
open FH, "<", $arquivo or die "Problemas para abrir o arquivo $arquivo: $!";
# Se o seu arquivo for muito grande, você não vai querer que ele
# transforme todo o conteúdo em um graaaaaaaaaande array consumindo 
# toda a memória. foreach() é utilizado em contexto de array, por isso este
# comportamento.
while ($_ = <FH>) {
    next unless $. > 1;

 if ($_ =~ /^\s*VARIAVEL/) 
{
  
    if( (s#^\s*VARIAVEL-S##) or (s#^\s*VARIAVEL-B##) ) 
    {
    
    
    
     }
      else
     {

Este aqui também pode ser modificado: 


                (undef,$variavel,$nome,undef,undef,undef,undef,undef,$data_arquivo,undef,$valor,$var) = split /\s+/, $_;

($nome, $data_arquivo, $valor, $var) = (split /\s+/)[1,2,8,10,11];
 

     $data_arquivo =~ s/(\d\d\d\d)(\d\d)(\d\d)_(\d\d)(\d\d)/$1-$2-$3 $4:00/;
 
     if (defined $table{$variavel}) 
     {
         
        $variavel = $table{$variavel};
              
     }

Creio que esteja aqui a sua dúvida, e uma possível solução, pois não lembro se podemos utilizar placeholders em nome de colunas também: 


     $update = "$variavel=$valor";
     
     $sql="Insert into tabela1(Nome,DataHora) values($nome,$data) on duplicate key update $update"; 

my $query = qq/INSERT INTO TABELA1(Nome, DataHora) values (? , ?) ON DUPLICATE KEY UPDATE ? = ?/;


my $sth = $dbh->prepare($query);
$sth->execute($nome, $data, $variavel, $valor) or warn "Problemas ao executar SQL: ", $dbh->errstr; 

    # $sth =  $dbh->prepare($SQL);
    # $sth->execute();
     # $sth->finish();

    }
         
  }
    
Entao pessoal esta ai!! :) desculpe se anteriormente nao postava o codigo.. daqui pra frente comecarei a postar!! :P 
Ajuda os companheiros tb!!

:***




-- 
Igor Sutton Lopes
http://www.izut.com/ _______________________________________________
Cascavel-pm mailing list
Cascavel-pm em pm.org
http://mail.pm.org/mailman/listinfo/cascavel-pm

		
---------------------------------
 Abra sua conta no Yahoo! Mail - 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. 
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20060525/5be511cd/attachment-0001.html 


Mais detalhes sobre a lista de discussão Cascavel-pm