[ASP] Foutmelding i.c.m vergelijking

Pagina: 1
Acties:

  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Topicstarter
Dit script vergelijkt 2 tabellen uit een database. De eerste tabel bestaat uit een ID en een Aminozuur (een letter). De tweede tabel idem, hetgeen dat een aminozuur kan verschillen op een bepaald ID.

Deze vergelijking moet worden weergegeven. Dit werkt tot nu toe wel. Nu moet er nog een terugkoppeling komen naar de gebruiker d.m.v. een foutmelding. Zodra er dus beide tabellen compleet gelijk zijn, moet er een foutmelding komen in de zin van "geen verschil aangetroffen".

Wat het script nu doet is een vergelijking zien tussen 2 aminozuren + de bijbehorende ID, maar met de foutmelding erbij! Dit moet dus niet. Het lukt ons niet om dit voor elkaar te krijgen.

ASP:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<!-- #INCLUDE File="include/testdb.asp" -->
<LINK href="azu.css" rel=stylesheet>

<%
Dim sqlCompare
Dim sqlCompare2

    'vergelijking van tabel amino met tabel wild type

        Dim RSCompare
        Dim RSCompare2

        Call OpenVerbinding()
                
        Set RSCompare = Server.CreateObject("ADODB.recordset")  ' duidelijke benaming van de recordset
        sqlCompare="SELECT * FROM tbl_amino"

        RSCompare.Open sqlCompare, dbc, adOpenStatic, adLockReadOnly, adCmdText

        Set RSCompare2  = Server.CreateObject("ADODB.recordset")  ' duidelijke benaming van de recordset
        sqlCompare2="SELECT * FROM tbl_wildtype"

        RSCompare2.Open sqlCompare2, dbc, adOpenStatic, adLockReadOnly, adCmdText
        
        ' -------------------------
        ' Begin protease loop
        ' -------------------------
        
        response.write "<BR>" & "<b>Protease</b>" & "<BR><BR>"
        
        fout = 0
        
        DO until RSCompare2.EOF and RSCompare.EOF

        Check1 = RSCompare.Fields.Item("AMINO").Value
        Check2 = RSCompare.Fields.Item("ID").Value
        Check3 = RSCompare2.Fields.Item("AMINO").Value
        Check4 = RSCompare2.Fields.Item("ID").Value
        
        If check4 < 100 and Check1 <> Check3 AND Check2 = Check4 THEN
'       If check4 < 100 and Check1 = Check3 AND Check2 = Check4 THEN
        Response.Write "" & check3 & vbTab & "" & check4 & vbTab & "" & check1 & "<BR>"
        else
        fout = 1
        End if



        RSCompare.MOVENEXT
        RSCompare2.MOVENEXT
        Loop 
        
        response.write bla
        If fout = 1 then
        response.write "Geen Protease verschil." & "<BR>"
        end if
        
        'If GeenProtease > 1 then
        'Response.Write "Geen Protease verschil."       
        'End if
            
        ' -------------------------
        ' Einde protease loop
        ' -------------------------



    Call SluitVerbinding()
    Set RSCompare=Nothing
%>


P.S. check4 < 100 betekent dat ie de eerste 99 ID vergelijkt.

[ Voor 0% gewijzigd door Batsies op 01-11-2002 11:22 . Reden: foutje van posten! ]

E-Developing


Verwijderd

Ik begrijp weinig van het probleem... kun je nog eens in een paar duidelijke zinnen zonder fouten aangegeven wat nu precies jullie probleem is.

  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Topicstarter
We hebben een database in ms access met 2 tabellen, 1 tabel (genaamd tbl_amino) heeft als kolom amino en 1 kolom ID de ander tabel (genaamd tbl_wildtype) heeft eveneens 1 kolom amino en 1 tabel id, maar de gegevens in de tabel amino verschillen van elkaar, zo zie je in tbl_amino in de kolom allemaal letters onderelkaar, elk ID heeft 1 letter gekregen, in de tbl_wildtype heeft ook elke id 1 letter in kolom amino, maar nu verschillen de letters van elkaar met de andere tabel.

Nu moeten de tabellen met elkaar vegelijken worden waar er een verschil optreed, bijv tbl_amino heeft op ID 1 een Q en op ID 2 een P en tbl_wildtype op ID 1 een P en op ID 2 ook een P, nu is hier dus een verschil gevonden op ID 1. Nu moet ie het verschil weergeven, dus " er is een verschil gevonden op ID 1 er staat in de wildtype een P en een Q in tabel Amino". Stel je nou voor als er geen verschil is, dan moet er komen " er is geen verschil gevonden". Wat er nu gebeurd is dat hij het verschil laat zien, maar ook "er is geen verschil gevonden"

E-Developing


  • Kamikazi
  • Registratie: Juli 2001
  • Niet online
Volgens mij moet je het zo zien:

tbl_amino bevat als eigenschappen ID & Amino.
hetzelfde is het geval voor tbl_wildtype.

Stel nu bijv dit:

tbl_amino:
ID = 1 -> Amino = P
ID = 2 -> Amino = Q

tbl_wildtype
ID = 1 -> Amino = P
ID = 2 -> Amino = S

Wat ze willen is als de IDs hetzelfde zijn, kijken of de waarde van Amino ook hetzelfde is. Als dat niet zo is, wordt dat op scherm weergegeven.

Verwijderd

Lijkt me erg simpel

code:
1
2
3
4
5
If check4 < 100 and Check1 <> Check3 AND Check2 = Check4 THEN
  Response.Write "" & check3 & vbTab & "" & check4 & vbTab & "" & check1 & "<BR>"
else
  response.write "Geen Protease verschil." & "<BR>"
End if

Op dit moment staan de response.write's buiten de loop. Zodra er een vergelijking goed is wordt fout op 1 gezet. Dit blijft vervolgens 1 ongeacht vergelijkingen die later nog fout zijn. Volgens mij zou fout trouwens geenFout moeten heten.

  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Topicstarter
Probleem is dan alleen dat hij nu 300x gaat laten zien "Geen verschil" ... maar er is wel een verschil, immers, bij ID1 waren de waarden van Amino anders.

Dat is juist het probleem: het script moet kijken of tijdens de HELE LOOP geen verschil optreden. Pas dan is er "geen verschil" tussen de tabellen. Anders is er wel een verschil..

E-Developing


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Boolean "isVerschil" op false initialiseren en zodra je een verschil tegen komt deze op true zetten. Waneer na afloop van alle loops "isVerschil" nog steeds op false staat is er dus geen verschil gevonden en kun je dat afdrukken.

Verder zou ik dit eerder door de DB zelf laten doen. Je kunt heel goed bv bijde tabellen aan elkaar linken en dan alle eruit filteren die verschillend zijn. Dat gaat waarschijnlijk een stuk sneller werken. Verder vind ik je naamgeving niet ideaal :)

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


  • Kamikazi
  • Registratie: Juli 2001
  • Niet online
Dat ligt maar net aan hoe je die boolean wil toepassen. Stel dat ze nml aan de hand van die boolean willen weergeven of er wel of geen veranderingen zijn gevonden bij het vergelijken.

Stel P = Q zorgt voor Boolean = TRUE. Echter, er kan ook iets zijn als S =S. Dan zou de Boolean FALSE zijn.

Als ze nu zeggen dat

If Boolean = "TRUE" then
response.write "Geen veranderingen gevonden"
end if

Dan werkt het niet, en ik denk dat ze dat bedoelen.

  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Topicstarter
Zoals Kamikazi het zegt bedoel ik het ook. Het lukte mij alleen niet om het goed te omschrijven. Maar weet iemand hoe ik dat kan oplossen dan?

E-Developing


Verwijderd

Academisch Ziekenhuis Utrecht?
Welk bedrijf maakt daar de software voor?

Verwijderd

Zoals je nu de gegevens opvraagt van de tabel, gaat het niet goed. Je bent namelijk niet zeker dat de ID's gerangschikt zijn van laag naar hoog (of andersom). Je kan het beter doen met behulp van een LEFT JOIN

SELECT ID.tbl_wildtype, AMINO.tbl_wildtype AMINO.tbl_amino FROM tbl_wildtype LEFT JOIN tbl_amino ON ID.tbl_wildtype = ID.tbl_amino ORDER BY ID.tbl_wildtype

Nu ben je zeker van dat de ID's gelijk zijn en tevens is het vrij eenvoudig om de zaak te vergelijken

  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Topicstarter
Je bent namelijk niet zeker dat de ID's gerangschikt zijn van laag naar hoog (of andersom).
Wel als je zelf die tabel vult ...

E-Developing


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Kamikazi schreef op 01 November 2002 @ 15:11:
Dat ligt maar net aan hoe je die boolean wil toepassen. Stel dat ze nml aan de hand van die boolean willen weergeven of er wel of geen veranderingen zijn gevonden bij het vergelijken.

Stel P = Q zorgt voor Boolean = TRUE. Echter, er kan ook iets zijn als S =S. Dan zou de Boolean FALSE zijn.

Als ze nu zeggen dat

If Boolean = "TRUE" then
response.write "Geen veranderingen gevonden"
end if

Dan werkt het niet, en ik denk dat ze dat bedoelen.


Dat bedooel ik niet helemaal. Het punt is juist dat je de waarde van de boolean ALLEEN veranderd waneer je een verschil tegen komt.

eigenlijk krijg je in je lus iets als:
psuedo
code:
1
2
3
4
5
6
7
8
9
10
verschillend=onwaar
while nog records {
  fetch A
  fetch B
  if A!=B {
    verschillend = waar
     print A en B zijn verschillend op positie n
  }
}
if niet verschillend print Er zijn geen verschillen gevonden


Nu krijg je OF een lijstje verschillen OF 1 regel met dat ze hetzelfde zijn.

Maar toch ben ik van mening dat dit sneller met een SQL commando te doen is. Door die iets uit te brijden kun je heel simpel een result set creeren waarin alleen de verschillen staan. Waneer die resultset leeg is zijn beiden dus gelijk :).

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


  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Topicstarter
De uitkomst van het script is als volgt:

Protease

Q 2 A
Geen protease verschil

RT

S 102 A
Geen RT verschil
-----------------------------
Dit kan dus niet goed zijn, hij ziet de verschillen, S 102 A wil zeggen: er is ingegeven S op plaats 102 en daar had een A moeten staan.

Wat nu het probleem is, en ik heb het geprobeerd door er variabelen aan te geven is dat ie een verschil ziet, maar op de andere plaatsen vindt ie geen fout, dus daarom laat ie allebei zien.

E-Developing


  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Topicstarter
Hier heb ik een screenshot van de foutmelding, waar duidelijk is te zien hoe de output is:

Afbeeldingslocatie: http://www.batsies.nl/uitkomst.jpg

Je ziet dus protease en Rt staan en daaronder een vergelijking die niet goed is, namelijk: Q 2 A, maar daaronder staat "Geen Protease Verschil" , dit mag dus niet samen!

Ik kom er niet meer uit :?

E-Developing


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Batsies schreef op 01 November 2002 @ 11:37:
Wat er nu gebeurd is dat hij het verschil laat zien, maar ook "er is geen verschil gevonden"
De reden daarvoor is dat het aantal aminozuren groter is dan 100 waardoor voor ID's groter of gelijk dan 100 het IF statement altijd naar false zal evalueren. Snelle oplossingen zijn:
  1. aanpassen van je ELSE in de loop zodat deze de waarde van fout niet wijzigt als de ID hoger is dan 100, of
  2. aanpassen van je WHILE zodat deze stopt na ID = 99, of
  3. alleen de eerste 100 ID's ophalen met een SELECT TOP 100 of een SELECT WHERE ID < 100
Waarbij ik ze meteen op volgorde (hoger is beter) van mijn voorkeur heb gezet (my humble opinion offcourse).

Maar beter nog lijkt me om, zoals Janoz al aangaf, een SQL oplossing te gebruiken. Daarbij hoef je namelijk niet altijd de complete sets van alle data over te halen, maar vraag je alleen de gegevens op van de database die noodzakelijk zijn.
En dat wordt dan iets als (typefouten voorbehouden ;)):
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
dim sql, rs
sql = "SELECT T1.ID, T1.AMINO AS amino_1, T2.AMINO AS amino_2 " _
    & "FROM tbl_amino T1, tbl_wildtype T2 " _
    & "WHERE T1.ID = T2.ID AND T1.AMINO <> T2.AMINO AND T1.ID < 100 " _
    & "ORDER BY T1.ID ASC"

set rs = dbc.execute(sql)

if rs.eof then
  response.write "Geen protease verschil"
else
  while not rs.eof
    response.write rs("amino_1") & " " & rs("ID") & " " & rs("amino_2") & "<br />"
    rs.movenext
  wend
end if

rs.close
set rs = nothing

Today's subliminal thought is:


  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Topicstarter
Bedankt, we zullen het even bekijken!

E-Developing


  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Topicstarter
Na de reply van Annie hebben we het volgende gerealiseerd, alleen de response.write " geen verschil gevonden" werkt niet, als er geen verschil is laat ie ook niet zien dat er geen verschil is gevonden.

ASP.NET Visual Basic:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 

<%' Option Explicit %>
<!-- #INCLUDE File="include/testdb.asp" -->
<LINK href="azu.css" rel=stylesheet>

<p>VERGELIJKING</p>

<%
Dim sqlCompare
Dim sqlCompare2

    'vergelijking van tabel amino met tabel wild type

        Dim RSCompare

        Call OpenVerbinding()

        Set RSCompare = Server.CreateObject("ADODB.recordset")  ' duidelijke benaming van de recordset
        sqlCompare="SELECT T1.ID, T1.AMINO AS amino_1, T2.AMINO AS amino_2 " _
    & "FROM tbl_amino T1, tbl_wildtype T2 " _
    & "WHERE T1.ID = T2.ID AND T1.AMINO <> T2.AMINO AND T1.ID < 100 " _
    & "ORDER BY T1.ID ASC"

        RSCompare.Open sqlCompare, dbc, adOpenStatic, adLockReadOnly, adCmdText

        ' -------------------------
        ' Begin Protease loop
        ' -------------------------

        response.write "<BR>" & "<b>Protease</b>" & "<BR><BR>"

        DO until RSCompare.EOF

if RSCompare.eof then
  response.write "Geen protease verschil"
else
  while not RSCompare.eof
    response.write RSCompare("amino_1") & " " & RSCompare("ID") & " " & RSCompare("amino_2") & "<br />"
    RSCompare.movenext
  wend
end if

        Loop 

        ' -------------------------
        ' Einde Protease loop
        ' -------------------------

        
    Call SluitVerbinding()
    Set RSCompare=Nothing
%>

E-Developing


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

je hebt ook niet letterlijk overgenomen wat ik zei :P

[hint] de protease loop zit al in de ELSE [/hint]

Today's subliminal thought is:


  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Topicstarter
Juist, duizend maal thnx! _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_
Nu je het zegt klinkt het best bekend ik ga dit maar ff doen: |:(

[ Voor 0% gewijzigd door Batsies op 08-11-2002 13:48 . Reden: nog een xtra vraagje ]

E-Developing


  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Topicstarter
ASP.NET Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Set RSCompare2 = Server.CreateObject("ADODB.recordset")  ' duidelijke benaming van de recordset
        
        sqlCompare2="SELECT T1.ID, T1.AMINO AS amino_1, T2.AMINO AS amino_2 " _
    & "FROM tbl_amino T1, tbl_wildtype T2 " _
    & "WHERE T1.ID = T2.ID AND T1.AMINO <> T2.AMINO AND T1.ID > 99 " _
    & "ORDER BY T1.ID ASC"
    
    RSCompare2.Open sqlCompare2, dbc, adOpenStatic, adLockReadOnly, adCmdText

        response.write "<BR>" & "<b>RT</b>" & "<BR><BR>"

if RSCompare2.eof then

  response.write "Geen RT verschil"
else
  while not RSCompare2.eof
    response.write RSCompare2("amino_1") & " " & RSCompare2("ID") & " " & RSCompare2("amino_2") & "<br />"
    RSCompare2.movenext
  wend
end if

    Call SluitVerbinding()
    Set RSCompare2=Nothing
%>


Bij de output: "" response.write RSCompare2("amino_1") & " " & RSCompare2("ID") & " " & "" moet bij het laten zien van ID, er 99 Id's bij afgetrokken worden, wij dachten dat we het zo konden doen:

RSCompare2("ID") = RSCompare2("ID") - 99

Helaas is dit niet goed, wie weet hoe dit moet :?

E-Developing


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Krijg ik nu korting als ik ooit wordt opgenomen in het AZU? ;)
Batsies schreef op 08 november 2002 @ 13:52:
Bij de output: "" response.write RSCompare2("amino_1") & " " & RSCompare2("ID") & " " & "" moet bij het laten zien van ID, er 99 Id's bij afgetrokken worden, wij dachten dat we het zo konden doen:

RSCompare2("ID") = RSCompare2("ID") - 99

Helaas is dit niet goed, wie weet hoe dit moet :?
ASP:
1
response.write "blabla" & (RSCompare2("ID") - 99) & "blabla"

Of begrijp ik je nu verkeerd? Zo ja, dan mag je nog een poging wagen om een duidelijkere uitleg te geven van de gewenste functionaliteit.

edit:

Je kan het natuurlijk ook regelen in je sql query:
SELECT (ID - 99) AS RT_ID, ... FROM ...

[ Voor 0% gewijzigd door Annie op 08-11-2002 14:13 . Reden: aanvulling ]

Today's subliminal thought is:


  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Topicstarter
Als we het in de sql query zetten, dan trekt ie er 99 mee af, maar hij zoekt pas vanaf >99, dus dat gaat niet, wel hebben we hem in de response.write gezet en dat werkt uitstekend.

Verder posten wij hier als studenten van de Hogeschool van Amsterdam voor een project in opdracht van het AZU, dus voor korting moet je bij mijn baas ( (8> ) wezen 8)7 !

Verder bedankt, alleen heb ik nog 1 vraag, ik krijg bij een ander script waar veel berekeningen en veel recordsets zitten een overflow error, weet jij iets wat ik hiertegen kan doen, of heb je dan meer informatie nodig over het script?

E-Developing


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Batsies schreef op 08 November 2002 @ 15:10:
Als we het in de sql query zetten, dan trekt ie er 99 mee af, maar hij zoekt pas vanaf >99, dus dat gaat niet, wel hebben we hem in de response.write gezet en dat werkt uitstekend.
Waarom zou het niet in de query werken? Heb je het geprobeerd?
Verder bedankt, alleen heb ik nog 1 vraag, ik krijg bij een ander script waar veel berekeningen en veel recordsets zitten een overflow error, weet jij iets wat ik hiertegen kan doen, of heb je dan meer informatie nodig over het script?
Met alleen deze beschrijving kan ik inderdaad niet zoveel. De error kan meerdere oorzaken hebben.
Kan je niet op het errornumber (+ beschrijving) zoeken op google of msdn?

Wat je verder kan doen is proberen het probleem te localiseren door delen van de code weg te commenten en/of standaardwaarden te gebruiken in plaats van berekende waarden voor tussen-uitkomsten. En daarna beetje bij beetje delen 'her-activeren'en kijken waar het fout gaat. M.a.w. fijn debuggen dus.

Today's subliminal thought is:


  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Topicstarter
Het in de query verwerken heb ik niet geprobeerd, maar omdat je bij select 99 van het ID afhaald en daarna vraagt, zoek boven de 99 dan vergeet ie ergens te zoeken, omdat stel je op ID 100 een fout zit, hij haalt er 99 dan vanaf en dan is die niet boven de 99 (>99) daarom laat hij die ook niet zien dan, maar dat is nog neit geprobeerd.

Tevens zal ik even bekijken hoe ik het aan ga pakken met die error.

Je hoort spoedig van me! AL zal dat waarschijnlijk loop volgende week worden, want ff weekendje vieren!

E-Developing


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Batsies schreef op 08 november 2002 @ 17:02:
Het in de query verwerken heb ik niet geprobeerd
Misschien toch maar eens doen. Ik ben er namelijk van overtuigd dat het wel werkt. :)

uitleg: De database haalt niet 99 van de ID af om vervolgens te controleren of deze aan de voorwaarden uit de WHERE voldoet, zoals jij beredeneert. Juist andersom. Eerst worden de rijen bepaald die voldoen aan de voorwaarde en daarna wordt in de teruggegeven resultaten 99 van het ID afgehaald.

Succes met de error.

[ Voor 0% gewijzigd door Annie op 08-11-2002 18:18 . Reden: uitleg ]

Today's subliminal thought is:


  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Topicstarter
owww, als dat zo is, wil ik het zeker is proberen, maar aan die error ga ik van de week even bekijken, anders hoor je het wel!

E-Developing

Pagina: 1