ik heb een sql database MSSQL 2008. ik gebruik access 2010 als frontend
tabellen zijn in simpele vorm hier weergegeven waarbij in de code de velden [ItemWarehouse],[ItemLocation] de criteria velden zijn die moeten matchen in beide tabellen en [ItemQtyReq] = gewenst aantal en [ItemQtyStock] = beschikbaarheid
tabel 1
[Partnumber],[criteriaveld],[gewenstaantal],[beschikbaaraantal]
1,a,2,0
1,b,2,0
2,a,1,0
3,a,1,0
tabel 2
[serienummer],[partnumber],[criteriaveld]
1,1,a
1,1,a
1,1,b
2,1,a
wat ik wil vanuit vba is dat alle records in de tabel (op de sql server) worden geevalueerd. er moet gekeken worden naar de totals voorraad welke voldoet aan de criteria dus in tabel1 de eerste moet gekeken worden hoeveel parts er in tabel 2 voldoen aan het partnumber en het criteriaveld en deze waarde moet geschreven worden in het beschikbareaantal veld van tabel1
dit is mij in sql niet gelukt maar probeer het nu in vba. de stappen die ik in gedachten had zijn
open tabel1
ga naar eerste record
lees partnumber en criteria
open tabel 2
doe een query met een count op partnumber where "criteria"
update record tabel1 waar bestchikbaarheid wordt ingevuld op basis van tabel2 count
close tabel2
ga naar volgende record en doe handelingen opnieuw totdat laatste record is afgehandeld.
ik kan op dit moment met een recordset de tabel 1 openen en doorlopen maar een update doet hij niet. wat doe ik verkeerd en kan dit ook makkelijker
verder heb ik het idee dat ik de diverse comando's voor ado en dao doorelkaar haal. is hier een duidelijk overzicht van. het liefst werk ik met ado omdat het nagenoeg allemaal op de SQL server gebeurt en ik geen linked tabels etc wil hebben ivm trage netwerk verbindingen (remote location)
tabellen zijn in simpele vorm hier weergegeven waarbij in de code de velden [ItemWarehouse],[ItemLocation] de criteria velden zijn die moeten matchen in beide tabellen en [ItemQtyReq] = gewenst aantal en [ItemQtyStock] = beschikbaarheid
tabel 1
[Partnumber],[criteriaveld],[gewenstaantal],[beschikbaaraantal]
1,a,2,0
1,b,2,0
2,a,1,0
3,a,1,0
tabel 2
[serienummer],[partnumber],[criteriaveld]
1,1,a
1,1,a
1,1,b
2,1,a
wat ik wil vanuit vba is dat alle records in de tabel (op de sql server) worden geevalueerd. er moet gekeken worden naar de totals voorraad welke voldoet aan de criteria dus in tabel1 de eerste moet gekeken worden hoeveel parts er in tabel 2 voldoen aan het partnumber en het criteriaveld en deze waarde moet geschreven worden in het beschikbareaantal veld van tabel1
dit is mij in sql niet gelukt maar probeer het nu in vba. de stappen die ik in gedachten had zijn
open tabel1
ga naar eerste record
lees partnumber en criteria
open tabel 2
doe een query met een count op partnumber where "criteria"
update record tabel1 waar bestchikbaarheid wordt ingevuld op basis van tabel2 count
close tabel2
ga naar volgende record en doe handelingen opnieuw totdat laatste record is afgehandeld.
ik kan op dit moment met een recordset de tabel 1 openen en doorlopen maar een update doet hij niet. wat doe ik verkeerd en kan dit ook makkelijker
verder heb ik het idee dat ik de diverse comando's voor ado en dao doorelkaar haal. is hier een duidelijk overzicht van. het liefst werk ik met ado omdat het nagenoeg allemaal op de SQL server gebeurt en ik geen linked tabels etc wil hebben ivm trage netwerk verbindingen (remote location)
Code:
Private Sub addstockqtytotblExRequestItems()
Dim cn As Object
'Dim rs As ADODB.Recordset
Dim sSQL As String
Dim PartNumber As String
Dim warehouse As String
Dim location As String
Dim requestID As Integer
Dim PK As Integer
Dim rs As Object
Dim strFile As String
Dim strSQL As String
On Error Resume Next
Call connection
(
Set cn = CreateObject("ADODB.Connection")
cn.Open strCon
strSQL = "SELECT [PartNumber],[ItemWarehouse],[ItemLocation],[ItemQtyReq],[ItemQtyStock],[ItemReqId],[ItemPK] FROM [LMD_Process_Control].[dbo].[tblExRequestItems]"
Set rs = CreateObject("ADODB.RECORDSET")
rs.activeconnection = cn
rs.Open strSQL
rs.MoveFirst
Do Until rs.EOF
PartNumber = rs("PartNumber")
warehouse = rs("ItemWarehouse")
location = rs("ItemLocation")
requestID = rs("ItemReqId")
PK = rs("ItemPK")
MsgBox (PartNumber & warehouse & location & requestID & PK)'tijdelijke melding of hij er goed door loopt
'rs.Edit
rs![ItemQtyStock] = "10" 'moet een query resultaat zijn die de juiste aantallen geeft vanuit tabel 2
rs.Update
rs.MoveNext
Loop
DoCmd.SetWarnings True
rs.Close
'qty = rs.Fields(1)
On Error GoTo 0
MsgBox "Done"
Exit Sub
------------------------------
Sub connection()
'set connection. change here if connection changes
strCon = "Provider=sqloledb;Server=ACH-SQL-V01;Database=LMD_Process_control; Uid=" & username & "; Trusted_Connection=yes; "
End Sub
Laatst bewerkt: