Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před rokem

blacksun
Člen
Registrovaný: 26. 9. 2008
Příspěvky: 164

Nefungující sql v datasource

Ahoj,

mám následující sql dotaz, který puštěný přes mssql studio normálně proběhne:

<?php
$query = "
SELECT
 [rir].[RunInResultID] ,
 [rir].[RunInStatus],
 [rir].[RunInFailure],
 [rir].[RunInPassedShortCircuit],
 [rir].[RunInShortCircuitValue],
 [rir].[RunInPassedMotorOrientation],
 [rir].[RunInTimeGroupName],
 [rir].[RunInEnvironmentTemp],
 convert(char,[rir].[RunInTestTimeStart],120) as [RunInTestTimeStart],
 convert(char,[rir].[RunInTestTimeEnd],120) as [RunInTestTimeEnd],
 [e].[OSC] as [RunInOperatorOSC],
 [e].[Name] as [RunInOperatorName],
 [stds].[StandName] as [RunInStandName],
 [rir].[PotPresent],
 [rir].[UnitID],
 [units].[UnitBarCode] as [UnitBarCode],
 [ubcs].[ModelNumber] as [ModelNumber],
 [rir].[TestProfileID],
 [tps].[Name] as [TestProfileName]


FROM
 [tbRunInResults] rir


INNER JOIN
 [tbOperators] [ops]
 ON [rir].[RunInOperatorID] = [ops].[OperatorID]


INNER JOIN
 [vwEmployees] e
 ON [e].[EmployeeId] = [ops].[EmployeeID]


INNER JOIN
 [tbStands] stds
 ON [rir].[RunInStandID] = [stds].[StandID]


INNER JOIN
 [tbTestProfiles] tps
 ON [rir].[TestProfileID] = [tps].[TestProfileID]


INNER JOIN
 [tbUnitStatus] units
 ON [rir].[UnitID] = [units].[UnitID]


INNER JOIN
 [vwUnitBarCodes] ubcs
 ON [units].[UnitBarCode] = [ubcs].[UnitBarCode]

";

?>

, použitý v nette ve funkci přes

<?php
return new DibiDataSource($query,$this->connection);
?>

ale padá při pokusu spočítat celkový počet řádků. Laděnka hlásí chybu DibiDriverException:Query error, ale nevím, kde hledat, když po copy-paste do mssql studia to jede ok.

Díky za případné nakopnutí.

Michal

 

#2 před rokem

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5548

Re: Nefungující sql v datasource

Vypiš si SQL z té výjimky a zjisti, co v něm zlobí.

 

#3 před rokem

blacksun
Člen
Registrovaný: 26. 9. 2008
Příspěvky: 164

Re: Nefungující sql v datasource

Právě to, co jsem postnul jako ten dotaz, je to, co dostanu dole na stránce výjimky z Laděnky.. Když to odtamtud zkopíruju rovnou do sql studia, tak to normálně projde..

 

#4 před rokem

blacksun
Člen
Registrovaný: 26. 9. 2008
Příspěvky: 164

Re: Nefungující sql v datasource

Tak jsem zjistil, že problém nastává v případě, že select je z tabulek joinovaných s view. Pokud select nahradím view nad tou samou tabulkou, funguje to, ale pokud použiju view, kde je join na další view, nefunguje to.
Práva jsou všude nastavena ok, pod tím samým uživatelem přes management studio dotaz, který zkopíruju z laděnky jako „chybný“, bez problémů funguje.

Nenapadá někoho, v čem by mohl být problém? Řešením by bylo dotaz přepsat bez view, ale právě od toho přeci jsou, aby zjednodušily dotazy.

 

#5 před rokem

blacksun
Člen
Registrovaný: 26. 9. 2008
Příspěvky: 164

Re: Nefungující sql v datasource

Tak problém vyřešen. Heterogenní view je potřeba vytvářet s nastavením

SET ANSI_NULLS ON

SET ANSI_WARNINGS ON

, stejně tak se před voláním dibi selectu musí zavolat nastavení spojení v query pomocí

<?php
dibi::query('SET ANSI_NULLS ON');
dibi::query('SET ANSI_WARNINGS ON');
?>

a pak vše už funguje tak, jak by člověk očekával.

Problém jsem odhalil tak, že jsem si do mssql.php driveru dibi vložil funkci mssql_get_last_message(), která mi odhalila hlášku serveru. Bylo by možné ji zakomponovat do vyhazování výjimky, aby bylo jasné, proč chyba vznikla?

BlackSUN

 

#6 před rokem

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5548

Re: Nefungující sql v datasource

mssql_get_last_message() je tam.

 

Zápatí