2010-06-04 5 views
0

J'utilise php pour mettre à jour certaines tables sous VFP 9.0 en utilisant ADO COM.Visual foxpro mise à jour DBF en utilisant php

Je suis capable de sélectionner et de mettre à jour le DBF jusqu'à ce que je spécifie une clause .
Au moment où j'ajoute une clause where à la requête, elle renvoie simplement ou met à jour 0 lignes.

$conn = new COM("ADODB.Connection"); 
$conn->Open('Provider=VFPOLEDB.1;Data Source="C:\\testDB.dbc";'); 

$query = "UPDATE TABLE1 set COL1 = \"AA\", COL2 = \"Updated value\" "; 
$conn->Execute($query); 

$query = "SELECT * FROM TABLE1 "; 
$rs = $conn->Execute($query) or die("Error in query: $query. " . $conn->ErrorMsg()); 
while (!$rs->EOF) { 
    echo " Got COL1: " . $rs->Fields("COL1") . " :: COL2: " . $rs->Fields("COL2") . " id: " . $rs->Fields("ID") . "\n"; 
    $rs->MoveNext(); 
} 

Résultat:

Got COL1: AA :: COL2: Updated value     id: 0 
Got COL1: AA :: COL2: Updated value     id: 1 
Got COL1: AA :: COL2: Updated value     id: 2 

Code 2: Avec clause Where

$query = "UPDATE TABLE1 set COL1 = \"BB\", COL2 = \"NEW2\" WHERE ID = 1"; 
$conn->Execute($query); 
$query = "SELECT * FROM TABLE1 "; 
$rs = $conn->Execute($query) or die("Error in query: $query. " . $conn->ErrorMsg()); 
while (!$rs->EOF) { 
    echo " Got COL1: " . $rs->Fields("COL1") . " :: COL2: " . $rs->Fields("COL2") . " id: " . $rs->Fields("ID") . "\n"; 
    $rs->MoveNext(); 
} 

Résultat:

Got COL1: AA :: COL2: Updated value     id: 0 
Got COL1: AA :: COL2: Updated value     id: 1 
Got COL1: AA :: COL2: Updated value     id: 2 

La colonne ID est la clé dans le tableau ci-dessus.

Je suis relativement nouveau à VFP. Je ne suis pas sûr que ce soit un paramètre Visual Foxpro ou autre chose qui empêche les mises à jour ou sélectionnez si fait de manière sélective.

Répondre

0

Les instructions SQL standard que vous utilisez sont facilement compatibles avec VFP. Aussi simple que soit votre échantillon, j'essaierais d'abord une légère modification. Au lieu d'utiliser évasion », il suffit d'utiliser des guillemets simples autour de votre échantillon tel que

MISE À JOUR TABLE1 mis COL1 = « AA », COL2 = « valeur actualisée » où ID = 1

voir si cela ne fait rien. Une fois que fonctionne, j'irais ensuite vers des requêtes paramétrées pour la sécurité ... surtout quand on utilise le web.VFP ne fonctionne pas avec les "places-places nommées" comme d'autres espaces réservés à la base de données, mais avec un '?' où votre « valeur » doit être appliqué ... tels que

MISE À JOUR TABLE1 mis col1 =?, col2 = où id =

Ensuite, lors de l'ajout des paramètres, ajouter en fonction de la même séquence que la ? place détenteurs

YourAdo.Parameters.Add("ForColumn1", variableForColumn1); 
YourAdo.Parameters.Add("ForColumn2", variableForColumn2); 
YourAdo.Parameters.Add("IDKeyColumn", variableForID); 

Ensuite, vous devriez être bon d'aller.

Désolé je ne peux pas aider spécifiquement avec PHP comme thats pas celui que je suis directement au courant, mais devrait aider à vous guider sur

+0

Ce n'est pas un problème avec les guillemets en tant que tels puisque la requête sans la clause WHERE fonctionne très bien. Mais merci quand même. Quelqu'un m'a suggéré d'utiliser Cast comme une solution de contournement [ où cast (ID as I) = 1] et cela semble fonctionner correctement pour moi. – mtanish

Questions connexes