Copy odbc vers mysql

cs_mimi6060 Messages postés 14 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 8 février 2013 - 6 févr. 2013 à 15:56
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 14 févr. 2013 à 18:23
je me connecter au fichier .nsf de lotus notes par le driver sqlnotes odbc et j'aimerais la copier dans mysql

j'utilise le code suivant il ma faut plus de 1h pour copier 100 000 enregistement comment je pourais aller plus vite?


merci


$fields = "txtStateFrom,txtStateTo,txtDate,txtActionShort,txtParent";

try {
$conn= new PDO('odbc:lotusreportsOpen', '', '');
$conn->beginTransaction();
$sql = 'SELECT'. $fields.' FROM frmHistoryLog ';
print_r($sql);
foreach ($conn->query($sql) as $datas ) {

$sql="INSERT INTO ".$this->table." (txtParent,txtActionShort,txtDate,txtStateTo,txtStateFrom ) VALUES ("
. $datas["txtParent"].",".$datas["txtActionShort"].",".$datas["txtDate"].",".$datas["txtStateTo"].",".$datas["txtStateFrom"];

mysql_query($sql) or die(mysql_error()." =>".mysql_query());
}
} catch (Exception $e) {
$conn->rollBack();
echo "Failed: " . $e->getMessage();
}

4 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
7 févr. 2013 à 23:14
<?php
try
{
  $conn = new PDO('odbc:lotusreportsOpen', '', ''); 
  $fields = 'txtStateFrom,txtStateTo,txtDate,txtActionShort,txtParent';
  $sql = 'SELECT '.$fields.' FROM frmHistoryLog';
  $rows = $conn->query($sql);
  $sql = 'INSERT INTO '.$this->table.' (txtParent,txtActionShort,txtDate,txtStateTo,txtStateFrom) VALUES ';
  foreach ($rows as $data)
    $sql .= '('.$data['txtParent'].','.$data['txtActionShort'].','.$data['txtDate'].','.$data['txtStateTo'].','.$data['txtStateFrom'].'), ';
  $sql = substr($sql, 0, -2).';';
  print_r($sql);
  mysql_query($sql) or die(mysql_error()); 
}
catch (Exception $e)
{
  echo 'Failed: '.$e->getMessage();
}
?>

Ca n'a aucun sens de faire un beginTransaction quand on ne fait qu'une lecture !
De plus, la boucle doit se faire sur une variable et pas sur la fonction (normal que ça traine)...
[bien que le résultat soit le même, tu vois bien qu'ici, la fonction est rappelée à chaque fois pour rien]

Chose à faire : filtrer les chaines de caractères ! S'il y a le moindre guillemet qui traine, ton script se plantera.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
cs_mimi6060 Messages postés 14 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 8 février 2013
8 févr. 2013 à 08:53
merci mais je comprend pas pourquoi il faut toujour autant de temps pour copier
il me faut genre 8h pour 1m de champs c'est normale?
0
cs_mimi6060 Messages postés 14 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 8 février 2013
8 févr. 2013 à 09:22
l'erreur while sending QUERY packet. PID=1796 c'est a cause d'un caracté bizard dans les camps recuperer?
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
14 févr. 2013 à 18:23
Si c'est aussi lent qu'auparavant, c'est que c'est le driver Lotus de PDO qui traine.
Pour l'erreur, faut envoyer par paquet (une fois que tu as n lignes, tu fais le query)

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
Rejoignez-nous