22. marts 2004 - 10:44Der er
10 kommentarer og 1 løsning
if exist med SQL
Hejsa ... skal ha udskrevet en hel masse counts fra 10 sider med udfyldelses formularer.
Da det drejer sig om måske 100 SQLstrenge på hver side ville det jo være smart at loope det, men der opstår jo nogle problemer da der ik er lige mange spørgsmål og svar på hver side. Altså der vil være nogle SQLstrenge der ikke kommer til at eksistere
Og jeg er for doven til at skrive hele lortet manuelt + det bliver et helvede at rette i.
Har lavet forestillet mig at lave loopet som vist nedenunder, men er det ikke muligt at lave en IF EXIST på hver SQL sådan at den bare ignorerer de SQLs der ikke eksisterer ?
If tabelnavn = "belysning" then antalspoergsmaal = 4 end if
If tabelnavn = "ventilation" then antalspoergsmaal = 8 end if
For i=1 to antalspoergsmaal for j=1 to 6 "SQLquestion" & i & "option" & j & " = SELECT COUNT(ID) AS Antal FROM " & (tabelnavn) & " WHERE svar" & i & "=" & j & " maaned=" & (maaned) & " AND aar=" & (aar) & "<br>" next response.write "<br>" next %>
Problemet er som sagt at SVAR er varierer fra side til side + svarmuligheder J også varierer.
Hvor der er 4 spørgsmål med 4 svar muligheder i 1. spørgsmål, 3 i 2. 4. i 3. og 4. i 4. spørgsmål kommer der jo til at blive skrevet nogle SQLs der ikke eksisterer. Men det kan du jo ikke rette med et loop.
Håber i forstår hvad jeg mener, det er pissesvært at forklare :)
SQL sætningen vil jo ikke være tom, scriptet vil jo gå i kage når jeg prøver at kalde en SQLstreng som ikke eksistere. Altså Hvis jeg prøver at hente data fra kolonne 6 i min tabel som eksistere i det ene tilfælde men ikke i det andet.
Det var derfor jeg tænkte på om man kunne lave noget if exist
Så forstår jeg ikke hvad du mener. Enten indeholder SQL strengen noget tekste eller ej??
Hvis man skriver et variable navn som ikke findes vil isEmpty være true. Her i kode eksemple 1 findes variablen SQL2 ikke og Conn.Execute udføre ikke: <% if not isEmpty(SQL2) then Conn.Execute(SQL2) end if %>
Her i kode eksemple 2 findes variablen SQL2 og Conn.Execute udføres: <% SQL2 = "insert into tabelnavn (kol) values ('abc')" if not isEmpty(SQL2) then Conn.Execute(SQL2) end if %>
Error Type: Microsoft OLE DB Provider for ODBC Drivers (0x80040E14) [MySQL][ODBC 3.51 Driver][mysqld-4.0.18-nt]Unknown column 'svar7' in 'where clause'
Og der kommer selvfølgelig til at være tilfælde hvor jeg vil kalde kolonner som ikke eksisterer. Er der overhovedet nogen smart løsning til det her ? eller bliver man nødt til at lave det manuelt ?
SQLquestion4option5 = "SELECT COUNT(ID) AS Antal FROM " & (tabelnavn) & " WHERE svar7=4 AND maaned='" & (maaned) & "' AND aar=" & (aar) & ""
if not isEmpty(SQLquestion4option5) then Conn.Execute(SQLquestion4option5) else response.write "SQLquestion4option5 findes ikke" end if
I det eksemple du har vist vil den udføre Conn.Execute da SQLquestion4option5 jo indeholder en SQL sætning. Den kan ikke tjekke om din SQL sætning er syntax messigt rigtig.
Vil du hvade noget som validere din SQL sætningen om kolonne navne findes i den valgte tabel?
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.