[ODBC/MySQL/PHP]gegevens uit mssql naar mysql

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
via ODBC haal ik gegevens op uit een SQL database, deze gegevens wil ik vervolgens in een volgende ODBC query gebruiken om een resultaat op te halen.
Dit resultaat zal vervolgens in een MySQL database komen.

Echter de 2e ODBC query wil niet, ik krijg de volgende foutmelding:

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

code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
if(!$odbc_link = odbc_connect($odbc_dsn, $odbc_user, $odbc_passwd)) 
{ 
    // Return error 
    echo "ODBC database fout!"; 
    // Exit 
    exit; 
} 

odbc_exec($odbc_link, "SET TEXTSIZE 65536"); 

$odbc_result = odbc_exec($odbc_link, $odbc_query) or die (odbc_error()); 
while($odbc_record = odbc_fetch_object($odbc_result)) 
{ 


   $odbc_query_hcat = "SELECT omschrijving FROM ItemClasses WHERE code = '".$odbc_record->afkcode."'"; 
   //regel 119: 
      $odbc_result_hcat = odbc_exec($odbc_link, $odbc_query_hcat) or die (odbc_error()); 
     // 
       while($odbc_record_hcat = odbc_fetch_object($odbc_result_hcat)) 

      { 
    
    $hcat = strval($odbc_record_hcat->Description); 
    
    
      } 


//hier staat de code die alles weer in MySQL plaats. 


}

Wat gaat er mis? Of is hetgeen wat ik wil gewoonweg niet mogelijk?

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Je code is zo onleesbaar, zet hem eens in [php] blokken.

Verder wat is de query die voor de tweede keer uitvoert? Is die correct?

Dus dump die eens op het scherm voordat je hem uitvoert.

Wat voor een veld is omschrijving?

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Je code is zo onleesbaar, zet hem eens in [php] blokken.
done

Verder wat is de query die voor de tweede keer uitvoert? Is die correct?

Dus dump die eens op het scherm voordat je hem uitvoert.

die 2e query begint op regel 16 hierboven.

Wat voor een veld is omschrijving?
dat is een varchar van max 60 tekens..

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Echo de query. Misschien staan er tekens in waardoor de query niet goed uitgevoerd wordt ofzo.

En een beetje meer inzet mag je wel tonen, "SQL state 24000 in SQLExecDirect" levert aardig wat hits op in Google.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
de query heb ik al naar gekeken.
ook al is de query SELECT * FROM ItemClasses

dan geeft ie nog dezelfde foutmelding.

op google vind je wel hits, maar een oplossing tot dusver nog niet gevonden.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Als je deze query als eerste uit voert werkt hij dan wel?

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
LuCarD schreef op dinsdag 21 augustus 2007 @ 17:22:
Als je deze query als eerste uit voert werkt hij dan wel?
ja dan werkt ie wel.
wanneer deze query in de while van een andere query uitgevoerd word, dan werkt ie niet.

raar

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ook wanneer ik de 2 querys boven elkaar zet, dan werkt ie goed.
maar wanneer de ene query in de ander staat zeg maar, dan werkt ie niet.

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
Je wilt nu met 1 link resource gegevens uit het ODBC object halen en tegelijk nieuwe queries uitvoeren. Ik gok dat het daarmee mis gaat, probeer eens -eerst- alle gegens op te halen en -daarna- de while loop over die gegevens array te laten lopen of twee aparte resources te gebruiken voor de eerste en tweede query :)

Ik moet eerlijk bekennen weinig ervaring met het ODBC object te hebben, maar de problematiek die je omschrijft klinkt wel bekend :+

[ Voor 17% gewijzigd door FragFrog op 21-08-2007 18:38 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
FragFrog schreef op dinsdag 21 augustus 2007 @ 18:37:
Je wilt nu met 1 link resource gegevens uit het ODBC object halen en tegelijk nieuwe queries uitvoeren. Ik gok dat het daarmee mis gaat, probeer eens -eerst- alle gegens op te halen en -daarna- de while loop over die gegevens array te laten lopen of twee aparte resources te gebruiken voor de eerste en tweede query :)

Ik moet eerlijk bekennen weinig ervaring met het ODBC object te hebben, maar de problematiek die je omschrijft klinkt wel bekend :+
het gebruiken van 2 aparte resources werkt helaas niet. dit heb ik zojuist geprobeerd. zelfde foutmelding krijg je dan te zien.

optie 1 zou je die mss wat meer uit kunnen leggen? die begrijp ik niet helemaal.

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
Simpel, je splitst de taken op:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    /****
      First create and fetch a numbered array of records. Note the
      empty execution loop, this is not one of the most beautifull ways to
      perform such a task but it'll suffice for now.
    ****/
while($odbc_records[++$i] = odbc_fetch_object($odbc_result))  {}

    /****
      Now for each record just retrieved we select the description and place it in 
      the $hcat array.
    ****/
foreach($odbc_records as $index => $odbc_record) {
  $odbc_query_hcat = "SELECT omschrijving FROM ItemClasses WHERE code = '".$odbc_record->afkcode."'";  
  $odbc_result_hcat = odbc_exec($odbc_link, $odbc_query_hcat) or die (odbc_error());  
  while($odbc_record_hcat = odbc_fetch_object($odbc_result_hcat)) {  
    $hcat[$index] = strval($odbc_record_hcat->Description);  
  }  
}

print_r($hcat); // will hopefully display what you require ;)


Ik weet niet precies wat je met de gegevens wilt en hoe je ze wilt gebruiken vandaar deze manier van opslaan, het 'netter' maken zul je zelf moeten doen.

Overigens, als je gegevens van een MySQL database naar een MSSQL database wilt verplaatsen zijn daar nettere manieren voor dan record voor record gegevens te kopieeren ;)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke bedankt voor je hulp tot zover, ik zal er morgen weer naar kijken vanaf mn werk.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bovenstaande code is idd niet de meest mooie code,

is er niet een andere oplossing? of is het domweg niet mogelijk om een odbc_exec uit te voeren binnen een andere odbc exec?

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op woensdag 22 augustus 2007 @ 08:46:
bovenstaande code is idd niet de meest mooie code,

is er niet een andere oplossing? of is het domweg niet mogelijk om een odbc_exec uit te voeren binnen een andere odbc exec?
Kan je geen join in je SQL gebruiken?

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik weet niet wat de eerste query is, maar als ik naar de tweede kijk lijkt het me dat deze makkelijk in de eerste te hangen is met een join waardoor je uberhaupt maar 1 query hebt.


Wat mijn bovenbuurman zegt dus :)

[ Voor 9% gewijzigd door Janoz op 22-08-2007 09:34 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
//edit
Nevermind, even gezocht en JOINs in een ODBC query horen wel degelijk te kunnen :)

[ Voor 78% gewijzigd door FragFrog op 22-08-2007 14:44 ]

[ Site ] [ twitch ] [ jijbuis ]

Pagina: 1