(Muhtemelen) Basit SQL Server imleç soru

4 Cevap php

PHP ODBC üzerinden sırayla iki saklı yordamları çağırmak gerekir:

#run stored procedure 1
$query = "Shipped_Not_Shipped_Rep ".$_GET['rep_id'];
$result = odbc_exec($dbh, $query);
odbc_result_all($result);

#run stored procedure 2
$query = "Shipped_Not_Shipped_Account ".$_GET['account_id'];
$result = odbc_exec($dbh, $query);
odbc_result_all($result);

Ben ikinci saklı yordam çağrısından sonra PHP bu hatayı alıyorum:

Warning: odbc_exec() [function.odbc-exec]: SQL error: [unixODBC][FreeTDS][SQL Server]Invalid cursor state, SQL state 24000 in SQLExecDirect

Ben saklı yordamları çağırmak sırasını yeniden düzenlemek, her zaman ikinci olduğunu hataları. , Idk, aramalar arasında imleç konumunu sıfırlamak için bir yolu var mı? Burada benim elemanın biraz dışarı.

4 Cevap

Veritabanına iki kolları açın. ODBC muhtemelen kolu imleci korur.

Ben de tam sorunu buldum. Görünüşe göre bu ücretsiz ODBC sürücüleri ile yaygındır. Bu MySQL ODBC SQL Server için bir proje göç çalışırken benim sabah baş ağrısı olmuştur. Sonunda benim için kurtuldum ne buldum.

Etkin bir imleç hala önceki sonuç kümesinden varolduğundan bu hata gösterir. Ben yeni bir tane vermeden önce tüm ilk kayıt kümesi (hatta sadece bunun kısmi bir parçası kullanarak eğer) okumanızı sağlayarak yöntemini yeniden / kesmek kullanmadan bu hata kurtulmak başardı. Not: PHP kullanıyorum.

Gives me an error:

$sql="SELECT COUNT(whatever) as whatever FROM whatever";
$countResult = odbc_exec($db, $sql);
$countMenuHeader = odbc_fetch_array($countResult);
extract ($countMenuHeader);
$countRecords = $NumMenuHeader;

$sql="SELECT whatever as whatever FROM whatever";
$result = odbc_exec($db, $sql);
$MenuHeader = odbc_fetch_array($result);

Cleared the error:

$sql="SELECT COUNT(whatever) as whatever FROM whatever";
$countResult = odbc_exec($db, $sql);

while($countMenuHeader = odbc_fetch_array($countResult))
{
   extract ($countMenuHeader);
   $countRecords = $NumMenuHeader;
}

$sql="SELECT whatever as whatever FROM whatever";
$result = odbc_exec($db, $sql);
$MenuHeader = odbc_fetch_array($result);

In short, make sure you completely read or fetch the data set before moving to the next statement.

Farklı imleçler, $ result1 ve $ result2 kullanarak sonuçları erişmeye çalışın.

Ben aynı sorun koştu, ama odbc_free_result($result) 2 sorguları arasındaki benim için bir iş yaptım.