Jeg har via. access oprettet forbindelse til en Oracle database. Det mystiske er, at den SQL access har genereret til udtræk af data ikke fungere i Oracle!
Er syntax forskellig?
F.eks en opbygning som denne ville ikke virke..
SELECT xxxx, xxxx, xxxx FROM ((xxxx INNER JOIN xxxx ON xxxx.ID = xxxx.ID) INNER JOIN xxxx ON xxxx.ID = xxxx.ID) INNER JOIN xxxx ON xxxx.ID = xxxx.ID WHERE (((xxxx.CODE) Like "xxxx*" Or (xxxx.CODE) Like "xxxx" AND ((xxxx.CRD)>"20060831" And (xxxx.CRD)<"20061001") AND ((xxxx.DELU) Is Null));
SELECT xxxx, xxxx, xxxx FROM (SELECT * FROM (xxxx INNER JOIN xxxx ON xxxx.ID = xxxx.ID) INNER JOIN xxxx ON xxxx.ID = xxxx.ID) INNER JOIN xxxx ON xxxx.ID = xxxx.ID WHERE (((xxxx.CODE) Like "xxxx*" Or (xxxx.CODE) Like "xxxx" AND ((xxxx.CRD)>"20060831" And (xxxx.CRD)<"20061001") AND ((xxxx.DELU) Is Null)) temp;
Hvis jeg gør som der får jeg samme fejl igen.. hvis jeg rykker SELECT * FROM ind i parantesen siger den manglende højreparantese. Som her
SELECT xxxx, xxxx, xxxx FROM ((SELECT * FROM xxxx INNER JOIN xxxx ON xxxx.ID = xxxx.ID) INNER JOIN xxxx ON xxxx.ID = xxxx.ID) INNER JOIN xxxx ON xxxx.ID = xxxx.ID WHERE (((xxxx.CODE) Like "xxxx*" Or (xxxx.CODE) Like "xxxx" AND ((xxxx.CRD)>"20060831" And (xxxx.CRD)<"20061001") AND ((xxxx.DELU) Is Null)) temp;
SELECT xxxx, xxxx, xxxx FROM xxxx, xxxx,xxxx,xxxx WHERE xxxx.ID = CDMCA2C.PRIMCAMP AND xxxx.ID = xxxx.ID AND xxxx.ID = xxxx.ID AND xxxx.CODE Like 'xxxx*' Or xxxx.CODE Like 'xxxx' AND xxxx.CRD >'20060831' And xxxx.CRD < '20061001' AND xxxx.DELU Is Null;
Grunden til at du ikke oplever sådanne ting i access er, at det er en meget primitiv enkeltbrugerdatabase hvor plads styres dynamisk (bortset fra at den er meget dårlig til at genbruge plads - derfor vokser Access altid og ender altid med at være korrumperet).
Og hvad programmeringssprog du anvender i fht Oracle er dybt ligegyldigt i fht hvordan databasen opfører sig. Du må leve med at Oracle nok er den databaseplatform der kræver mest driftsviden og -kompentancer. Desværre...
Jeg er lidt nysgerrig. Får du samme resultat hvis du bare fjerner nogle af de skrækkelige paranteser, som Access er så glad for, og overlader prioriteringen af tabelrækkefølgen til Oracle:
SELECT xxxx, xxxx, xxxx FROM xxxx INNER JOIN xxxx ON xxxx.ID = xxxx.ID INNER JOIN xxxx ON xxxx.ID = xxxx.ID INNER JOIN xxxx ON xxxx.ID = xxxx.ID WHERE xxxx.CODE Like "xxxx%" Or (xxxx.CODE Like "xxxx%" AND xxxx.CRD>"20060831" And xxxx.CRD<"20061001" AND xxxx.DELU Is Null);
Jeg er ikke helt sikker på, om den resterende parantes er sat rigtigt, da dit oprindelige WHERE udtryk ikke har et matchende sæt af "(" og ")" og således ikke kan være korrekt. Der er nok sket en typografisk fejl under "efterbehandlingen". :-)
jeg mente heller ikke programmeringssproget, men mere udviklingsmiljøet=) der er en helt del databasefaciliteter indbygget i visual studio så håbede lidt på det fungere lidt som access
Som sagt - desværre. Databasen er ret ligeglad med hvad du skriver din applikation i.
Men et par andre ting; Du skal lige være opmærksom på at Oracle *ikke* overholder SQL92 standarden på et meget væsenligt punkt. En tom streng i en VARCHAR2 svarer til en NULL værdi. I SQL92 - og i Access - er en tom streng forskellig fra en NULL værdi.
Dvs. at hvis kolonnen DELU indeholder '' vil den i Oracle returnere TRUE på "IS NULL". Det gør den ikke i Access.
Derudover - når du blander AND og OR i SQL - så bør du altid omfatte delene med (). Der er stor forskel på om du skriver (udtryk and udtryk) or (udtryk) eller (udtryk) and (udtryk or udtryk)...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.