Jag försöker att få ut vilka ArrNo som inte är registrerade. ArrNo är i datatypen nvarchar, och det "hoppar mellan registreringarna, dvs nemerna ligger inte i följd. Hej, måste först få korrigera ditt språk - det stavas "jämför". Ursäkta stavfelet, tyvärr så tror jag inte att jag är ensam här på forumet som råkat göra det. Så rätt så, jag är förvirrad. Men även VB har samma sak för sig om du inte deklararar dina variabler först. Har du ingen typdeklaration så är de variant. Jag missade att visa att jag hade dimmat som long, då borde väl ios skrivas clng((rst(0))? Jag är helt ute och åker, finns det ingen som kan ge mig ett tips i rätt riktning, eller skall jag bara glömma detta? Jag tror detta bör fungera. Anar att du använder SQL server? Hej Andreas. Jag får inte Andreas att fungera utan försöker så här: JAg missade at det ska vara As inte To i Cast: Hej Andreas och tack för ditt tålamod. Den måste ju stäla en fråga för varje tal i intervallen. Jag fick kanonproblem, hela applikationen frös och jag fick ingen som helst rättsida med den. Jag tycker det är dåligt att lagra ett tal som en sträng. Formatera det istället när det ska vissas till tresifrigt. Vad menar du med attribut?Få ut vilka nummer som inte finns med.
Jag vill nu få fram vilka ArrNo som inte är registrerade.
Jag försöker så här:
<code>
con.CursorLocation = adUseClient
SQL = "select arrno from t_songtitlar where arrno not like 'c%' order by arrno"
Set rst = con.Execute(SQL)
Do While Not rst.EOF
List1.AddItem rst(0)
rst.MoveNext
Loop
rst.MoveLast
If Not rst.EOF Then
stSista = rst(0)
End If
Form1.Caption = "Det sista ArrNo: " & stSista
Dim i As Integer
rst.MoveFirst
Do While Not rst.EOF
For i = 1 To stSista
If CInt(rst(0)) <> i Then
List2.AddItem i
End If
Next i
rst.MoveNext
Loop
</code>
När jag gämmför If CInt(rst(0)) <> i Then så skriver han in i listan massor med gånger, men ArrNo som är med.
Gör jag så här:
If CInt(rst(0)) = i Then
så skriver han in ArrNo en gång. Hur jag än gör, så lyckas jag inte få fram siffrorna som inte är registrerade, hur skall jag lösa det?Sv: Få ut vilka nummer som inte finns med.
När det gäller din rutin kan det vara så att även om asp bara har en datatyp - variant så kan det ställa till det. Gardera dig därför att omvandla båda värden till samma typ:
<code>
If CInt(rst(0)) <> cInt(i) Then
</code>Sv: Få ut vilka nummer som inte finns med.
Vad får du ASP ifrån? Detta är ju forumet för VB.Sv: Få ut vilka nummer som inte finns med.
Rörande din fråga - löste det sig?Sv: Få ut vilka nummer som inte finns med.
Nej jag har fortfarande problem, och jag är inte säker på att jag försöker att lösa problemet på rätt sätt. Sv: Få ut vilka nummer som inte finns med.
Sv: Få ut vilka nummer som inte finns med.
<code>
Dim fldArrNo as ADODB.Field
Dim Index as Long
Dim Number as Long
Dim LastNumber as Long
con.CursorLocation = adUseClient
SQL = "SELECT arrno FROM t_songtitlar WHERE arrno NOT LIKE 'c%' ORDER BY CAST(arrno TO Int)"
Set rst = con.Execute(SQL)
Set fldArrNo = rst("ArrNo")
Do Until rst.EOF
List1.AddItem fldArrNo.Value
Number = CLng(fldArrNo.Value) - 1
For Index = LastNumber To Number
List2.AddItem Index
Next
LastNumber = Number + 2
Loop
</code>
Om du inte vill ha med intervallen 0 till första. Skriver du:
<code>
Dim fldArrNo as ADODB.Field
Dim Index as Long
Dim Number as Long
Dim LastNumber as Long
con.CursorLocation = adUseClient
SQL = "SELECT arrno FROM t_songtitlar WHERE arrno NOT LIKE 'c%' ORDER BY CAST(arrno TO Int)"
Set rst = con.Execute(SQL)
If Not rst.EOF Then
Set fldArrNo = rst("ArrNo")
LastNumber = CLng(fldArrNo.Value) - 1
Do Until rst.EOF
List1.AddItem fldArrNo.Value
Number = CLng(fldArrNo.Value) - 1
For Index = LastNumber To Number
List2.AddItem Index
Next
LastNumber = Number + 2
Loop
End If
</code>Sv: Få ut vilka nummer som inte finns med.
Ett gott försök men jag får ett Error:
incorrect syntax near the keyword 'TO'
Det är alltså denna del som han inte accepterar:
ORDER BY CAST(ArrNo TO Int)
Vad tror du?Sv: Få ut vilka nummer som inte finns med.
<code>
Dim stSista As Long
SQL = "select count(1) from T_songtitlar"
Set rst = con.Execute(SQL)
Form1.Caption = "Ansluten till SQL Server. Antal titlar registrerade: " & rst(0)
con.CursorLocation = adUseClient
SQL = "select arrno from t_songtitlar where arrno not like 'c%' order by arrno"
Set rst = con.Execute(SQL)
rst.MoveLast
If Not rst.EOF Then
stSista = rst(0)
End If
Dim i As Long
For i = 1 To stSista
SQL = "select arrno from t_songtitlar where arrno not like 'c%' and CInt(arrno) = " & i & ""
Set rst = con.Execute(SQL)
If rst.EOF Then
List2.AddItem i
End If
Next
Form1.Caption = "Det sista ArrNo: " & stSista
rst.Close
Set rst = Nothing
</code>
Problemet är att detta tydligen inte fungerar i SQL:
and CInt(arrno)
Några förslag?Sv: Få ut vilka nummer som inte finns med.
Testa med :
ORDER BY CAST(ArrNo AS Int)
Om du vill tjäna lite prestanda gör du en vy av frågan.Sv: Få ut vilka nummer som inte finns med.
Jag kom på ett annat problem, som gjorde allt mycket lättare.
Vi har kört in några cover, och kallar de ArrNo för C001 osv. Här var problemet, man can ju inte göra om C till ett tal. Jag ändrade det till 901 och så var den saken löst.
Nu kör jag så här, vad tycker du?
<code>
Dim stSista As Long
SQL = "select count(1) from T_songtitlar"
Set Rst = Con.Execute(SQL)
Form1.Caption = "Ansluten till SQL Server. Antal titlar registrerade: " & Rst(0)
Con.CursorLocation = adUseClient
'jag satte en begränsning på 100, vill till innan jag kommer över det
SQL = "select arrno from t_songtitlar where arrno < 100 order by arrno"
Set Rst = Con.Execute(SQL)
Rst.MoveLast
If Not Rst.EOF Then
stSista = Rst(0)
End If
Dim i As Long
For i = 1 To stSista
'här kör jag en sökning per nummer, kanske detta slöa ner?
SQL = "select arrno from t_songtitlar where arrno = " & i & ""
Set Rst = Con.Execute(SQL)
If Rst.EOF Then
List4.AddItem i
End If
Next
Rst.Close
Set Rst = Nothing
</code>
Detta fungera bra, men tycker du att jag gör prestandaförlust med detta systemet?Sv: Få ut vilka nummer som inte finns med.
Min kod är mer effektiv. Eftersom den kräver bara ett anrop till databasen och en loop.
Jag undrar varför inte du använder den?
JAg har inte kunnat testa den. Så du får antagligen pilla lite med den.
Sedan för står jag inte varför arrno innehöl C och var av nvarChar typ.Sv: Få ut vilka nummer som inte finns med.
Att det fanns ett c berode på att jag hade gjort några cover, som jag betecknade med ett c i början. Nu är det ändrat.
Jag har nvarChar typ därför att jag ville ha tresiffrigt(inledande nollor). Jag antar att det är enda sättet att göra det på.
Hittade precis varför den låste sig, och nu fungerar den bra.
Jag skall ändra till din kod.
Tack så mycket för hjälpen.Sv: Få ut vilka nummer som inte finns med.
Jag har för mig nVarchar är ju en variabel läng. Om du bara ska ha tre tecken så kan du ju använda nChar.
Men kör på sträng. om du vil markera den som Cover föreslår jag en attribut.Sv: Få ut vilka nummer som inte finns med.
Jag gjorde det enkelt för mig och började en nummerserie på 900 för cover, men attribut och SQL har jag missat tydligen.