snellere insert into

Status
Niet open voor verdere reacties.

leonard0

Gebruiker
Lid geworden
6 mrt 2003
Berichten
140
Beste mensen, ik ben bezig met het bouwen van een formulier. Daarbij heb ik onderandere 6 textvakken die ik wil opslaan. Deze wil ik echter alleen opslaan als ze gegevens bevatten. hiervoor gebruik ik de volgende code die perfect werkt:

Code:
Private Sub btnOpslaan_Click()
If Not IsNull Then CurrentDb.Execute "Insert Into tblTijdsbesteding (AantalUren, TakenID, Datum) Values (' & Me.txtAantaluren1.Value & ',' & Me.cmbTakenID.Value & ',' & Me.txtDatumatum.Value & ') WHERE tblTijdsbesteding.UserID = ('" & Me.txtUserID.Value & "'); "

If Not IsNull Then CurrentDb.Execute "Insert Into tblTijdsbesteding (AantalUren, TakenID, Datum) Values (' & Me.txtAantaluren2.Value & ',' & Me.cmbTakenID.Value & ',' & Me.txtDatumatum.Value & ') WHERE tblTijdsbesteding.UserID = ('" & Me.txtUserID.Value & "'); "

If Not IsNull Then CurrentDb.Execute "Insert Into tblTijdsbesteding (AantalUren, TakenID, Datum) Values (' & Me.txtAantaluren3.Value & ',' & Me.cmbTakenID.Value & ',' & Me.txtDatumatum.Value & ') WHERE tblTijdsbesteding.UserID = ('" & Me.txtUserID.Value & "'); "

If Not IsNull Then CurrentDb.Execute "Insert Into tblTijdsbesteding (AantalUren, TakenID, Datum) Values (' & Me.txtAantaluren4.Value & ',' & Me.cmbTakenID.Value & ',' & Me.txtDatumatum.Value & ') WHERE tblTijdsbesteding.UserID = ('" & Me.txtUserID.Value & "'); "

If Not IsNull Then CurrentDb.Execute "Insert Into tblTijdsbesteding (AantalUren, TakenID, Datum) Values (' & Me.txtAantaluren5.Value & ',' & Me.cmbTakenID.Value & ',' & Me.txtDatumatum.Value & ') WHERE tblTijdsbesteding.UserID = ('" & Me.txtUserID.Value & "'); "

If Not IsNull Then CurrentDb.Execute "Insert Into tblTijdsbesteding (AantalUren, TakenID, Datum) Values (' & Me.txtAantaluren6.Value & ',' & Me.cmbTakenID.Value & ',' & Me.txtDatumatum.Value & ') WHERE tblTijdsbesteding.UserID = ('" & Me.txtUserID.Value & "'); "

End Sub

uiteindelijk moet er veel gebruik van worden gemaakt via het netwerk en dan wordt door 6 verschillende INSERT INTO's het netwerk onnodig sloom.

Zou iemand a.u.b. een compactere oplossing kunnen bedenken? Weet dat het door een functie met IS NOT NULL steeds een gedeelte van een string toe te voegen mogelijk is, maar zie zo nog niet helemaal hoe. b.v.d!
groeten, leo
 
Je kan met één insert statement toch meerdere records inserten?

Maak een lokale tabel aan waarin je snel even je gegevens parkeert.
Geef daarna het volgende commando, waarbij je tabel en veldnamen even veranderd:
Code:
INSERT INTO target [(field1[, field2[, ...]])] [IN externaldatabase]
SELECT [source.]field1[, field2[, ...]
FROM tableexpression

Ik weet niet wat
Code:
If Not Isnull Then ...
doet. Volgens mij mis je wat. Lijkt me geen volledig statement.

Succes!
 
Laatst bewerkt:
Tnx Guus, Klopt die statement was ongeldig/onvolledig, bedoelde dit:
Code:
If not isnull(me.cbotaak1) then CurrentDB.execute Insert into tblTijdsbesteding (AantalUren, TakenID, Datum) Values (' & Me.txtAantaluren1 & ',' & Me.cmbTakenID & ',' & Me.txtDatumatum & ') WHERE tblTijdsbesteding.UserID = ('" & Me.txtUserID & "'); "

Daarbij is de - if not isnull - juist erg belangrijk. De vet gedrukte tekst zijn variabel en lopen op tot ...8

If not isnull(me.cbotaak1) then CurrentDB.execute Insert into tblTijdsbesteding (AantalUren, TakenID, Datum) Values (' & Me.txtAantaluren1 & ',' & Me.cmbTakenID1 & ',' & Me.txtDatumatum & ') WHERE tblTijdsbesteding.UserID = ('" & Me.txtUserID & "'); "


Volgens mij bereik ik niet helemaal wat ik wil met een lokale tabel
 
Met die lokale tabel bedoel ik dat je eerst je gegevens lokaal parkeert, dus dat je ze razendsnel eerst lokaal opslaat. Daarna doe je één trage insert query op een remote database. Misschien helpt het. Als je lokale database ook traag is dan heeft het geen zin.

Ik ben even kwijt of je met het INSERT statement met VALUES meerdere records kan toevoegen.
Verder weet ik geen versnelling te bedenken.

Succes!
 
Bedankt voor het meedenken.In principe is een lokale tabel een goed idee. Maar de database zal worden geopend van een centrale plek in het netwerk, daar zal ook de lokale tabel aangemaakt worden (toch?). Dus ik denk dat de huidige code dan net zo goed funtioneert want netwerk wordt dan evenveel belast. Het werkt tenslotte nu al maar ik dacht dat het beter kon. ben al lang aan het knutsellen geweest maar loop elke keer weer vast.

Deze code bv:
Code:
Dim StrSql As String
Dim rsVast AS recordset

StrSQL= "Insert INTO tbl.. (Userid, taakid, Aantaluren Values ('" & me.userid & "', '" & datum & "' 
IF NOT ISNULL(me.txt1) then strSQL + "('" & Me.txturen1 & "','" & Me.txttaak1"'))"
IF NOT ISNULL(me.txt1) then strSQL + "('" & Me.txturen2 & "','" & Me.txttaak2"'))"
IF NOT ISNULL(me.txt1) then strSQL + "('" & Me.txturen3 & "','" & Me.txttaak3"'))"
Set rsVast = CurrentDb.Openrecordset(strSQL)

elke keer dus meer toevoegen aan een string, maar das ook niet wat ik zoek. want elk veld dat genummerd is moet maar 1 keer weggeschreven worden en de rest wel vaker.

Er klopt enorm veel niet val en is ook niet volledig. Ik denk dat ik het maar houdt bij het huidige, zo erg is dat ook weer niet.
 
....
Deze code bv:
Code:
Dim StrSql As String
Dim rsVast AS recordset

StrSQL= "Insert INTO tbl.. (Userid, taakid, Aantaluren Values ('" & me.userid & "', '" & datum & "' 
IF NOT ISNULL(me.txt1) then strSQL + "('" & Me.txturen1 & "','" & Me.txttaak1"'))"
IF NOT ISNULL(me.txt1) then strSQL + "('" & Me.txturen2 & "','" & Me.txttaak2"'))"
IF NOT ISNULL(me.txt1) then strSQL + "('" & Me.txturen3 & "','" & Me.txttaak3"'))"
Set rsVast = CurrentDb.Openrecordset(strSQL)

elke keer dus meer toevoegen aan een string, maar das ook niet wat ik zoek. want elk veld dat genummerd is moet maar 1 keer weggeschreven worden en de rest wel vaker.

Er klopt enorm veel niet val en is ook niet volledig. Ik denk dat ik het maar houdt bij het huidige, zo erg is dat ook weer niet.

Je code klopt niet. Moet dit
Code:
IF NOT ISNULL(me.txt1) then strSQL + "('" & Me.txturen2 & "','" & Me.txttaak2"'))"
niet
Code:
IF NOT ISNULL([B]me.txt2[/B]) then [B]strSQL = strSQL[/B] + "('" & Me.txturen2 & "','" & Me.txttaak2"'))"
zijn?
Als je veel strings moet plakken dan zijn er snellere manieren om dit te doen. Kijk maar hiero. Je moet hem wel een beetje aanpassen.
Als alles via een traag netwerk loopt dan is er weinig winst te behalen.
 
Je code klopt niet. Moet dit
Code:
IF NOT ISNULL(me.txt1) then strSQL + "('" & Me.txturen2 & "','" & Me.txttaak2"'))"
niet
Code:
IF NOT ISNULL([B]me.txt2[/B]) then [B]strSQL = strSQL[/B] + "('" & Me.txturen2 & "','" & Me.txttaak2"'))"
zijn?
Als je veel strings moet plakken dan zijn er snellere manieren om dit te doen. Kijk maar hiero. Je moet hem wel een beetje aanpassen.
Als alles via een traag netwerk loopt dan is er weinig winst te behalen.

Ik denk dat je gelijk hebt, kan het alleen hier even niet uitproberen.
Over dat strings plakken: volgens mij overschat je mn VBA kennis een beetje, kan weinig uit die code wijs worden, vooralsnog iig.
tnx, leo
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan