Do until EOF-Schleife durch Datensätze in VB 2010
Ich habe ein Programm unter, das scheint nicht zu tun, was ich will, es zu tun. Im Allgemeinen, der pseudocode ist: geben Sie die Anzahl der Meilen (Meilen.text), klicken Sie auf die Schaltfläche, überprüfen Sie: ist die Laufleistung eingegeben, die kleiner oder gleich dem Kilometerstand radius (milestotextbox) in der Datenbank? Wenn ja, greifen die LKW-rate entspricht, daß der radius (truckloadratetext) und zeigt Sie in einem Textfeld namens "rate" (rate.text) und, wenn nicht, weiter suchen, bis ein EOF-Zeichen. Ich habe gezeigt, den folgenden code. Es erlaubt mir, geben Sie die Laufleistung aber nicht überprüfen und das Ergebnis anzeigen.
Die Daten in der Tabelle sieht wie folgt aus:
ID MILESTO TRUCKLOADRATE
1 50 200
2 100 300
3 200 700
4 300 800
So, wenn jemand eine Laufleistung wie 10, ich möchte es zu nehmen die LKW-rate von $200. Wenn jemand 250, die rate würde dann bei 800. Ich bin nicht allzu hung, die jetzt über das, was passiert, wenn eine Laufleistung liegt außerhalb des Bereichs. Nur versuchen, herauszufinden, warum die Quantenmechanik so etwas nicht funktioniert. Es ist mein erstes mal mit Datensätze mit einem LOOP-Befehl, so dass ich versuche, halten Sie es einfach mit meinem Programm.
Was könnte ich falsch gemacht? Danke im Voraus und hoffe, dass alle eine tolle Neue Jahr!
Public Class Form1
Private Property EOF As Boolean
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the '_test_2DataSet.test' table. You can move, or remove it, as needed.
Me.TestTableAdapter.Fill(Me._test_2DataSet.test)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Do Until EOF()
If Val(MilestoTextBox.Text) <= Val(Miles.Text) Then
rate.Text = TruckloadTextBox.Text
End If
Loop
End Sub
End Class
- Wo ist
EOF
jemals aufgestellt? - Wichtigere Frage...warum Sie die Schleife durch die Tabelle anstelle der Verwendung von SQL?
- nycdan: habe Versucht, die SQL-Abfrage-generator, aber es war einfach nicht gehen, es zu tun, denn ich brauche für weitere Berechnungen mit der Zahl, die die Suche findet. Ich glaube, ich brauche zu üben mit SQL. Versuchen zu lernen, mehr VB.
- Da EOF wird nie geändert, es wird immer falsch sein und die Schleife wird niemals enden! Auch Sie nicht Lesen Milesto aus dem DataSet überall.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weder wissen, wo Sie die
EOF
variable, noch verstehe ich, seinen Zweck. Haben Sie einen Blick auf Folgendes Beispiel, das zeigt, wie eine Schleife, die alle Zeilen einer DataTable(ORDER BY MILESTO ASC
) zu finden, der nächste Wert größer als der angegebene Wert:Wenn Sie keine order by -
MILESTO
zunächst oder einfach sehen wollen, ein anderer Ansatz, nicht um eine Datenbank-Abfrage, versuchen Sie, diese LINQ-To-DataSet Ansatz:Wenn Sie möchten, um die Datenbank abzufragen, Folgendes SQL gibt die nächste
TRUCKLOADRATE
ist größer/gleich als der@MileAge
-parameter:Eine Abfrage hinzufügen, um Ihre DataAdapapter, die einen einzelnen Wert zurückgibt, und hat einen aussagekräftigen Namen wie
getTruckloadRateByMileAge
. Dann ist es ganz einfach:Text
-Eigenschaft auf den richtigen Typ(in deinem Falldim mileAge=Decimal.Parse(Miles.Text)
). Hinzugefügt wurde die "SQL-Weg".Sorry für die Verzögerung bei der Beantwortung der Frage hier und ich möchte allen danken, die antworteten, vor allem Tim.
In der Zusammenfassung, Wo ein Benutzer will eine Suche über ein dataset und vergleichen Sie einem Benutzer eingegebenen Wert gegen eine Art von index (in meinem Fall, wenn ein Kilometerstand eingetragen ist weniger als oder gleich einige Grenze-Wert) und der entsprechende Datensatz erfüllt die Kriterien, die Lösung, die funktioniert (danke Tim!) ist:
In dem Beispiel, Kilometerstand konvertiert einen Wert, der verwendet werden kann zum Vergleich mit einer Spalte in das dataset namens MILESTO, die eine Meile radius, das entspricht einem Preis für den Transport von Gütern genannt TRUCKLOADRATE. Das Programm durchläuft jede Zeile im dataset, bis der Zustand, die Laufleistung <= Zeile.MILESTO ist zufrieden.
Mein ursprünglicher Gedanke war, durch eine Suche, bis EOF und diese Methode funktioniert besser.
Danke an alle und nochmal meine Entschuldigung für die Verzögerung bei der zusammenfassen für andere Benutzer.