For Next problem

For - next Probleme

Habe da ein Problem bei der For Schleife.
Ich will X Datenstze verndern, das will ich natrlich mit der For Schleife tun.
Nur kriege ich es nicht hin, das die Datenstze weitergezhlt werden.

Es fngt bei check_ei_hf1 an und soll sich bei jedem Durchlauf um 1 erhhen (jeder hf)

mein Versuch: rs.field(“check_ei_hf(zahl)”).value…… scheiterte, sowie einige andere.

Wie muss ich es richtig machen?

[b]dim zahl, a as integer

a=19

for zahl=1 to a

rs.field ("check_ei_hf1"). Value = doku.cont_einsatz21.check_ei_hf1.value
rs.field ("check_berihf1"). Value = doku.cont_einsatz21.Checkberi_hf1.value
rs.field("ei_hf1").Value=doku.cont_einsatz21.ei_hf1_vname.text
rs.field("ei_hf1_name").Value=doku.cont_einsatz21.ei_hf1_nname.text
rs.field("ei_hf1_km").Value=doku.cont_einsatz21.ei_km_hf1.text

zahl=zahl+1

next[/b]

Bin Anfnger und dabei auf Eure Hilfe angewiesen. Danke in Vorraus

Die For/Next Schleife zählt selbstständig um 1 hoch. Wenn Du also “zahl=zahl+1” schreibst, wird in jedem Durchlauf um 2 erhöht.

Mit For x=y To z STEP -1
oder
mit For x=y To z STEP 3

kann man diese Verhalten beeinflussen

Ja danke Sascha, aber wie bekomme ich eine Variable für die Zahl hinter jedem hf hin, so das sie hochzählen kann?

rs.field (“check_ei_hf1”). Value = doku.cont_einsatz21.check_ei_hf1.value
rs.field ("check_ei_hfb[i][/i]"). Value = doku.cont_einsatz21.check_ei_hfi[/i].value[/b]

habe das zahl=zahl+1 weggelassen

Moin Jürgen,

Wenn ich es richtig verstehe, führst Du im Feldname eine Zahl, damit Du mehrere Felder in einem Durchlauf über die Variable zahl änderst? Bei mir geht das immer, in dem ich den Counter (zahl) ganz normal in den Feldnamen einbaue. Das bedeutet bei einer Zahl natürlich, daß ich sie zunächst in einen String umwandeln muß.

Dein ausdruck lautet dann also

rs.field (“check_ei_hf”+str((zahl)). Value

So manipuliere ich die Rs Felder ohne Probleme. Hoffe, es hilft

Noch ein Tip. Nutze den Debugger. Schnapp Dir den zu manipulierenden Ausdruck und teste ihn über eine lokale Variable. Meistens siehst Du dann schon mehr.

tmp = “check_ei_hf”+str(zahl) oder so…

moin Christian,

rs.field (“check_ei_hf”+str((zahl)). Value -> das funktioniert
aber wie mache ich es damit
= doku.cont_einsatz21.check_ei_hf1.value

kriege immer als meldung das dieses Item nicht exestiert wenn ich z.b. so schreibe

doku.cont_einsatz21.check_ei_hfb[/b].value

im Prinzip genauso…

was ist denn doku.cont_ einsatz21.check_ei_hf(zahl) für ein Objekt?

check_ei_hf1.text ist ein Textfeld, dessen Inhalt dann gespeichert oder geupdatet werden soll. Von diesen Feldern existieren gesamt 20 Stück.

Auch als Felder in der Tabelle einer Datenbank.

dok.cont_einsatz21 ist der Container Name.

fehlt da nicht ein movenext in der Schleife?

jou, das auch…

Wenn es ein Textfeld ist, solltest Du das Ganze (die gleichartigen Textfelder) als Array definieren…

Gebe mal einen Teilcode so ein, wie ich es im moment gelöst habe. von den Blöcken sind insgesamt 19 vorhanden.

[code]
dim db as new REALSQLDatabase
dim wert as string
dim rs as RecordSet
dim count as integer

db=my_db.f_connect
if db.error then msgbox db.errormessage

wert=doku.cont_einsatz21.ei_id.Text
rs=db.SQLSelect("select * from einsatz where ei_id=’ “+wert+” ’ ")

count=rs.RecordCount

rs.edit

If mCurrentRecordSet <> Nil Then
mCurrentRecordSet.Edit

mCurrentRecordSet.Update
mDatabase.Commit

End If

// Daten Hundeführer

if doku.cont_einsatz21.check_ei_hf1.value=true then

rs.field ("check_ei_hf1"). Value = doku.cont_einsatz21.check_ei_hf1.value
rs.field ("check_berihf1"). Value = doku.cont_einsatz21.Checkberi_hf1.value
rs.field("ei_hf1").Value=doku.cont_einsatz21.ei_hf1_vname.text
rs.field("ei_hf1_name").Value=doku.cont_einsatz21.ei_hf1_nname.text
rs.field("ei_hf1_km").Value=doku.cont_einsatz21.ei_km_hf1.text

else
rs.field (“check_ei_hf1”).value=false
rs.field (“check_berihf1”). Value =false
rs.field(“ei_hf1_km”).Value= " "
end if

if doku.cont_einsatz21.check_ei_hf2.value=true then

rs.field ("check_ei_hf2"). Value = doku.cont_einsatz21.check_ei_hf2.value
rs.field ("check_berihf2"). Value = doku.cont_einsatz21.Checkberi_hf2.value
rs.field("ei_hf2").Value=doku.cont_einsatz21.ei_hf2_vname.text
rs.field("ei_hf2_name").Value=doku.cont_einsatz21.ei_hf2_nname.text
rs.field("ei_hf2_km").Value=doku.cont_einsatz21.ei_km_hf2.text

else
rs.field (“check_ei_hf2”).value=false
rs.field (“check_berihf2”). Value =false
rs.field(“ei_hf2_km”).Value= " "
end if

if doku.cont_einsatz21.check_ei_hf3.value=true then

rs.field ("check_ei_hf3"). Value = doku.cont_einsatz21.check_ei_hf3.value
rs.field ("check_berihf3"). Value = doku.cont_einsatz21.Checkberi_hf3.value
rs.field("ei_hf3").Value=doku.cont_einsatz21.ei_hf3_vname.text
rs.field("ei_hf3_name").Value=doku.cont_einsatz21.ei_hf3_nname.text
rs.field("ei_hf3_km").Value=doku.cont_einsatz21.ei_km_hf3.text

else
rs.field (“check_ei_hf3”).value=false
rs.field (“check_berihf3”). Value =false
rs.field(“ei_hf3_km”).Value= " "
end if

if doku.cont_einsatz21.check_ei_hf4.value=true then

rs.field ("check_ei_hf4"). Value = doku.cont_einsatz21.check_ei_hf4.value
rs.field ("check_berihf4"). Value = doku.cont_einsatz21.Checkberi_hf4.value
rs.field("ei_hf4").Value=doku.cont_einsatz21.ei_hf4_vname.text
rs.field("ei_hf4_name").Value=doku.cont_einsatz21.ei_hf4_nname.text
rs.field("ei_hf4_km").Value=doku.cont_einsatz21.ei_km_hf4.text

else
rs.field (“check_ei_hf4”).value=false
rs.field (“check_berihf4”). Value =false
rs.field(“ei_hf4_km”).Value= " "
end if

.
.
.
.
.

rs.Update

if db.error then msgbox db.errormessage

db.Commit
rs.Close[/code]

Also du müsstest für mehrere Datensätze schon in einer Schleife durchgehen.
in etwas so:

while not rs.EOF rs.edit // Fehler überprüfen // ändern rs.update // Fehler überprüfen rs.movenext wend

Achtung edit / update in Schleife funktioniert noch nicht so, das ist ein Bug in Xojo. Für größere Datenmengen muß das SQLupdate verwandt werden…

also

db.sqlselect(“update set feld1 = “xyz”, feld2 = “cde” WHERE bedingung = erfüllt”)

s. Bug Report
Reported: 17 of March 2013 (Feedback case: 26701)

Case 26701 ist für MySQL.

Generell bin ich bei edit/update misstrauisch und mach es in meinen Apps lieber via SQL Update.

aber wie kannst Du dann evtl Fehlercodes bei Recordlocking abfangen?

nach jedem edit/update Aufruf immer Fehlerstatus abfragen.

wenn Du über SQL Update gehst, meine ich

auch da gibt es einen error/errormessage, die dann sagt, was kaputt ist.