OVH Cloud OVH Cloud

SELECT dans un DataTable d'un Dataset

14 réponses
Avatar
Martin
Bonjour à tous,

J'ai une table dans un Dataset qui a été rempli avec des données provenant
d'un Serveur SQL.
Une fois que ce DataTable est rempli, je voudrais faire un SELECT sur ce
DataTable.
Un SELECT identique à celui sur une table sur le serveur SQL.
Est-ce que c'est possible ou qu'elle est la manière de faire un SELECT sur
un DataTable ???
Présentement, je fais une boucle pour retrouver mes données dans le
DataTable mais je perds énormément de performance.

Merci à l'avance !!!

4 réponses

1 2
Avatar
Martin
Je comprends ce que tu m'as soumis For each, etc. mais cela n'est pas assez
performant pour moi car j'ai beaucoup de donné à traiter.

Voici mon code...


Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim y As Integer
Dim a As Integer
Dim i As Integer
Dim crReportDocument As New ReportDocument
Dim crExportOptions As ExportOptions
Dim crDiskFileDestinationOptions As DiskFileDestinationOptions
Dim Fname As String

Dim paramFieldsDateDebut As New ParameterFields
Dim paramFieldDateDebut As New ParameterField
Dim discreteValDateDebut As New ParameterDiscreteValue

Dim paramFieldsDateFin As New ParameterFields
Dim paramFieldDateFin As New ParameterField
Dim discreteValDateFin As New ParameterDiscreteValue

cmpVPC.daVPC.SelectCommand.CommandText = "SELECT Date_Entree AS
DtEntree, Date_Sortie AS DTSortie, Produit, Poids_Brut AS PoidsBrut,
Poids_Net AS PoidsNet, Poids_Tare AS PoidsTare, Destination, '0' + Feuillet
AS NoBillet, Numero AS NoPesee, No_Site AS SiteBalance FROM
tblProduitAExtraireDepartBB INNER JOIN TR_Depart_Transact_BB ON
tblProduitAExtraireDepartBB.strNoProduitBB = TR_Depart_Transact_BB.Produit
WHERE TR_Depart_Transact_BB.Date_Entree >= '" & Session("DateDebut") & "' and
TR_Depart_Transact_BB.Date_Sortie <= '" & Session("DateFin") & "'"
cmpVPC.FillDataSet(dsVPC, "tblTransDepart")

cmpVPC.daVPC.SelectCommand.CommandText = "SELECT CONVERT(DateTime,
Replace(CONVERT(Varchar(10), DT_Entree, 102) + ' ' + CONVERT(Varchar(20),
CONVERT(Varchar(11), HR_ENTREE, 108)), '.', '/')) AS DtEntree,
CONVERT(DateTime, Replace(CONVERT(Varchar(10), DT_Sortie, 102) + ' ' +
CONVERT(Varchar(20), CONVERT(Varchar(11), HR_SORTIE, 108)), '.', '/')) AS
DtSortie, No_Prod AS Produit, Mss_Brt AS PoidsBrut, (Mss_Brt - Mss_Tare) AS
PoidsNet, Mss_Tare AS PoidsTare, No_Prvn AS Destination, '0' + No_Bllt AS
NoBillet, No_pesee AS NoPesee, No_Site AS SiteBalance FROM
tblProduitAExtraireDepartExacModus INNER JOIN TR_Depart_Trnspese_ExactModus
ON tblProduitAExtraireDepartExacModus.strNoProduitExactModus =
TR_Depart_Trnspese_ExactModus.No_Prod WHERE
TR_Depart_Trnspese_ExactModus.Dt_Entree >= '" & Session("DateDebut") & "' and
TR_Depart_Trnspese_ExactModus.Dt_Sortie <= '" & Session("DateFin") & "'"
cmpVPC.FillDataSet(dsVPC, "tblTransDepart")

cmpVPC.daVPC.SelectCommand.CommandText = "SELECT * FROM
tblContratAExtraireArriveCOPE5000"
cmpVPC.FillDataSet(dsVPC, "tblContratAExtraireArriveCOPE5000")

cmpVPC.daVPC.SelectCommand.CommandText = "SELECT * FROM
tblContratAExtraireArriveSFK"
cmpVPC.FillDataSet(dsVPC, "tblContratAExtraireArriveSFK")

cmpCOPE5000.daCOPE5000.SelectCommand.CommandText = "SELECT
Facturation.CodeFeuillet AS CodeFeuillet, Facturation.DateEntree AS
DateEntree, Facturation.IDUsine AS UsineReception, Usine.Nom AS
UsineReception, Facturation.NoBillet AS NoBillet, TransactCopeau.MasseBrute
AS PoidsBrut, TransactCopeau.MasseNette AS PoidsNet, Contrat.Code AS
CodeContrat, Contrat.Description AS DescContratDepart FROM ((Facturation LEFT
JOIN Usine ON Facturation.IDUsine = Usine.ID) INNER JOIN TransactCopeau ON
Facturation.IDTypeTransact = TransactCopeau.ID) LEFT JOIN Contrat ON
Facturation.IDContrat = Contrat.ID WHERE (((CONVERT(DateTime,
Replace(CONVERT(Varchar(10), Facturation.DateEntree, 102),'/','-')) >= '" &
Session("DateDebut") & "')))"
cmpCOPE5000.FillDataSetCOPE5000(dsVPC, "tblTransArriveEtape1")


'''' C'est à partir d'ici que je voudrais faire mon SELECT avec mes DataTable
'''' pour ne pas faire de boucle pour être beaucoup plus performant car
'''' présentement cela n'est pas fort.
'''
''' Je dois faire une boucle dans chacun des mes DataTable pour passé
chacune des lignes pour ensuite l'ajouter dans un DataTable final.
'''
'''
'''
'''
For a = 0 To
dsVPC.Tables("tblContratAExtraireArriveCOPE5000").Rows.Count - 1
For y = 0 To dsVPC.Tables("tblTransArriveEtape1").Rows.Count - 1
If Not
(dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeContrat")) Is
DBNull.Value Then
If
Trim(dsVPC.Tables("tblContratAExtraireArriveCOPE5000").Rows(a).Item("strContrat"))
= Trim(dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeContrat")) Then
Dim workTable As DataTable =
dsVPC.Tables("tblTransArrive")
Dim workRow As DataRow = workTable.NewRow()
workRow("CodeFeuillet") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeFeuillet")
workRow("DateEntree") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("DateEntree")
workRow("UsineReception") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("UsineReception")
workRow("DescReception") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("DescReception")
workRow("CodeContrat") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeContrat")
workRow("DescContratDepart") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("DescContratDepart")
workRow("NoBillet") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("NoBillet")
workRow("PoidsBrut") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("PoidsBrut")
workRow("PoidsNet") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("PoidsNet")
dsVPC.Tables("tblTransArrive").Rows.Add(workRow)
End If
End If
Next
Next

a = 0
y = 0
For a = 0 To dsVPC.Tables("tblContratAExtraireArriveSFK").Rows.Count
- 1
For y = 0 To dsVPC.Tables("tblTransArriveEtape1").Rows.Count - 1
If Not
(dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeContrat")) Is
DBNull.Value Then
If
Trim(dsVPC.Tables("tblContratAExtraireArriveSFK").Rows(a).Item("strContrat"))
= Trim(dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeContrat")) Then
Dim workTable As DataTable =
dsVPC.Tables("tblTransArrive")
Dim workRow As DataRow = workTable.NewRow()
workRow("CodeFeuillet") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeFeuillet")
workRow("DateEntree") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("DateEntree")
workRow("UsineReception") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("UsineReception")
workRow("DescReception") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("DescReception")
workRow("CodeContrat") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeContrat")
workRow("DescContratDepart") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("DescContratDepart")
workRow("NoBillet") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("NoBillet")
workRow("PoidsBrut") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("PoidsBrut")
workRow("PoidsNet") =
dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("PoidsNet")
dsVPC.Tables("tblTransArrive").Rows.Add(workRow)
End If
End If
Next
Next

a = 0
y = 0
If dsVPC.Tables("tblTransArrive").Rows.Count >= 1 Then
For a = 0 To dsVPC.Tables("tblTransDepart").Rows.Count - 1
cmpVPC.daVPC.SelectCommand.CommandText = "SELECT Date_Entree
AS DtEntree, Date_Sortie AS DTSortie, Produit, Poids_Brut AS PoidsBrut,
Poids_Net AS PoidsNet, Poids_Tare AS PoidsTare, Destination, '0' + Feuillet
AS NoBillet, Numero AS NoPesee, No_Site AS SiteBalance FROM
tblProduitAExtraireDepartBB INNER JOIN TR_Depart_Transact_BB ON
tblProduitAExtraireDepartBB.strNoProduitBB = TR_Depart_Transact_BB.Produit
WHERE TR_Depart_Transact_BB.Date_Entree >= '" & Session("DateDebut") & "' and
TR_Depart_Transact_BB.Date_Sortie <= '" & Session("DateFin") & "'"
cmpVPC.FillDataSet(dsVPC, "tblTransDepart")

For y = 0 To dsVPC.Tables("tblTransArrive").Rows.Count - 1
i = 0
If Not
(dsVPC.Tables("tblTransDepart").Rows(a).Item("NoBillet")) Is DBNull.Value Then
If
Trim(dsVPC.Tables("tblTransDepart").Rows(a).Item("NoBillet")) =
Trim(dsVPC.Tables("tblTransArrive").Rows(y).Item("CodeFeuillet")) Then
i = 1
Exit For
End If
Else
i = 0
Exit For
End If
Next

If i = 0 Then
Dim workTable As DataTable = dsVPC.Tables("tblTransFinal")
Dim workRow As DataRow = workTable.NewRow()
workRow("SiteBalance") =
dsVPC.Tables("tblTransDepart").Rows(a).Item("SiteBalance")
workRow("Dt_Entree") =
Mid(dsVPC.Tables("tblTransDepart").Rows(a).Item("DtEntree"), 1, 10)
workRow("Hr_Entree") =
Mid(dsVPC.Tables("tblTransDepart").Rows(a).Item("DtEntree"), 12, 8)
workRow("Destination") =
dsVPC.Tables("tblTransDepart").Rows(a).Item("Destination")
workRow("NoBillet") =
dsVPC.Tables("tblTransDepart").Rows(a).Item("NoBillet")
workRow("PoidsBrut") =
dsVPC.Tables("tblTransDepart").Rows(a).Item("PoidsBrut")
dsVPC.Tables("tblTransFinal").Rows.Add(workRow)
End If
Next
Else
For a = 0 To dsVPC.Tables("tblTransDepart").Rows.Count - 1
Dim workTable As DataTable = dsVPC.Tables("tblTransFinal")
Dim workRow As DataRow = workTable.NewRow()
workRow("SiteBalance") =
dsVPC.Tables("tblTransDepart").Rows(a).Item("SiteBalance")
workRow("Dt_Entree") =
Mid(dsVPC.Tables("tblTransDepart").Rows(a).Item("DtEntree"), 1, 10)
workRow("Hr_Entree") =
Mid(dsVPC.Tables("tblTransDepart").Rows(a).Item("DtEntree"), 12, 8)
workRow("Destination") =
dsVPC.Tables("tblTransDepart").Rows(a).Item("Destination")
workRow("NoBillet") =
dsVPC.Tables("tblTransDepart").Rows(a).Item("NoBillet")
workRow("PoidsBrut") =
dsVPC.Tables("tblTransDepart").Rows(a).Item("PoidsBrut")
dsVPC.Tables("tblTransFinal").Rows.Add(workRow)
Next
End If

a = 0
y = 0
If dsVPC.Tables("tblTransDepart").Rows.Count >= 1 Then
For a = 0 To dsVPC.Tables("tblTransArrive").Rows.Count - 1
For y = 0 To dsVPC.Tables("tblTransDepart").Rows.Count - 1
i = 0
If Not
(dsVPC.Tables("tblTransDepart").Rows(y).Item("NoBillet")) Is DBNull.Value Then
If
Trim(dsVPC.Tables("tblTransArrive").Rows(a).Item("CodeFeuillet")) =
Trim(dsVPC.Tables("tblTransDepart").Rows(y).Item("NoBillet")) Then
i = 1
Exit For
End If
Else
i = 0
Exit For
End If
Next

If i = 0 Then
Dim workTable As DataTable = dsVPC.Tables("tblTransFinal")
Dim workRow As DataRow = workTable.NewRow()
workRow("SiteBalance") =
dsVPC.Tables("tblTransArrive").Rows(a).Item("DescContratDepart")
workRow("Destination") =
dsVPC.Tables("tblTransArrive").Rows(a).Item("UsineReception")
workRow("Dt_Arrivee") =
Mid(dsVPC.Tables("tblTransArrive").Rows(a).Item("DateEntree"), 1, 10)
workRow("Hr_Arrivee") =
Mid(dsVPC.Tables("tblTransArrive").Rows(a).Item("DateEntree"), 12, 8)
workRow("NoBillet") =
dsVPC.Tables("tblTransArrive").Rows(a).Item("NoBillet")
workRow("PoidsBrut") =
dsVPC.Tables("tblTransArrive").Rows(a).Item("PoidsBrut")
dsVPC.Tables("tblTransFinal").Rows.Add(workRow)
End If
Next
Else
For a = 0 To dsVPC.Tables("tblTransArrive").Rows.Count - 1
Dim workTable As DataTable = dsVPC.Tables("tblTransFinal")
Dim workRow As DataRow = workTable.NewRow()
workRow("SiteBalance") =
dsVPC.Tables("tblTransArrive").Rows(a).Item("DescContratDepart")
workRow("Destination") =
dsVPC.Tables("tblTransArrive").Rows(a).Item("UsineReception")
workRow("Dt_Arrivee") =
Mid(dsVPC.Tables("tblTransArrive").Rows(a).Item("DateEntree"), 1, 10)
workRow("Hr_Arrivee") =
Mid(dsVPC.Tables("tblTransArrive").Rows(a).Item("DateEntree"), 12, 8)
workRow("NoBillet") =
dsVPC.Tables("tblTransArrive").Rows(a).Item("NoBillet")
workRow("PoidsBrut") =
dsVPC.Tables("tblTransArrive").Rows(a).Item("PoidsBrut")
dsVPC.Tables("tblTransFinal").Rows.Add(workRow)
Next
End If

crReportDocument.Load(Server.MapPath("rptRapportVerification.rpt"))

paramFieldDateDebut.ParameterFieldName = "DateDebut"
discreteValDateDebut.Value = Session("DateDebut")
paramFieldDateDebut.CurrentValues.Add(discreteValDateDebut)
paramFieldsDateDebut.Add(paramFieldDateDebut)

crReportDocument.DataDefinition.ParameterFields.Item(0).ApplyCurrentValues(paramFieldDateDebut.CurrentValues)

paramFieldDateFin.ParameterFieldName = "DateFin"
discreteValDateFin.Value = Session("DateFin")
paramFieldDateFin.CurrentValues.Add(discreteValDateFin)
paramFieldsDateFin.Add(paramFieldDateFin)

crReportDocument.DataDefinition.ParameterFields.Item(1).ApplyCurrentValues(paramFieldDateFin.CurrentValues)

crReportDocument.SetDataSource(dsVPC)

Fname = "C:exports" & Session.SessionID.ToString & ".pdf"
crDiskFileDestinationOptions = New DiskFileDestinationOptions
crDiskFileDestinationOptions.DiskFileName = Fname

With crReportDocument.ExportOptions
.DestinationOptions = crDiskFileDestinationOptions
.ExportDestinationType = ExportDestinationType.DiskFile
.ExportFormatType = ExportFormatType.PortableDocFormat
End With

crReportDocument.Export()

Response.ClearContent()
Response.ClearHeaders()
Response.ContentType = "application/pdf"
Response.WriteFile(Fname)
Response.Flush()
Response.Close()

System.IO.File.Delete(Fname)
End Sub
Avatar
Patrice
Après examen rapide tu boucles sur tous les enregistrements. Essaie tout de
même avec Find. En interne le DataTable utilise des "index" qui améliorent
la rapidité de la recherche (il ne parcourera donc pas toutes les lignes
pour trouver la bonne clé).

Une autre stratégie serait aussi de trier les deux DataTable sur le champ
que tu recherches ce qui permet de parcourir ces deux dataset une unique
fois pour trouver les correspondances.

Actuellement il semble que pour chaque ligne de l'un, tu testes toutes les
autres lignes de l'autre...

Je te suggère de tester ces approches avec deux datatables de test ayant
chacun à peu-près le nombre de lignes auquel tu t'attends avant de tirer une
conclusion sur les performances...

--
Patrice

"Martin" a écrit dans le message de
news:
Je comprends ce que tu m'as soumis For each, etc. mais cela n'est pas


assez
performant pour moi car j'ai beaucoup de donné à traiter.

Voici mon code...


Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim y As Integer
Dim a As Integer
Dim i As Integer
Dim crReportDocument As New ReportDocument
Dim crExportOptions As ExportOptions
Dim crDiskFileDestinationOptions As DiskFileDestinationOptions
Dim Fname As String

Dim paramFieldsDateDebut As New ParameterFields
Dim paramFieldDateDebut As New ParameterField
Dim discreteValDateDebut As New ParameterDiscreteValue

Dim paramFieldsDateFin As New ParameterFields
Dim paramFieldDateFin As New ParameterField
Dim discreteValDateFin As New ParameterDiscreteValue

cmpVPC.daVPC.SelectCommand.CommandText = "SELECT Date_Entree AS
DtEntree, Date_Sortie AS DTSortie, Produit, Poids_Brut AS PoidsBrut,
Poids_Net AS PoidsNet, Poids_Tare AS PoidsTare, Destination, '0' +


Feuillet
AS NoBillet, Numero AS NoPesee, No_Site AS SiteBalance FROM
tblProduitAExtraireDepartBB INNER JOIN TR_Depart_Transact_BB ON
tblProduitAExtraireDepartBB.strNoProduitBB = TR_Depart_Transact_BB.Produit
WHERE TR_Depart_Transact_BB.Date_Entree >= '" & Session("DateDebut") & "'


and
TR_Depart_Transact_BB.Date_Sortie <= '" & Session("DateFin") & "'"
cmpVPC.FillDataSet(dsVPC, "tblTransDepart")

cmpVPC.daVPC.SelectCommand.CommandText = "SELECT CONVERT(DateTime,
Replace(CONVERT(Varchar(10), DT_Entree, 102) + ' ' + CONVERT(Varchar(20),
CONVERT(Varchar(11), HR_ENTREE, 108)), '.', '/')) AS DtEntree,
CONVERT(DateTime, Replace(CONVERT(Varchar(10), DT_Sortie, 102) + ' ' +
CONVERT(Varchar(20), CONVERT(Varchar(11), HR_SORTIE, 108)), '.', '/')) AS
DtSortie, No_Prod AS Produit, Mss_Brt AS PoidsBrut, (Mss_Brt - Mss_Tare)


AS
PoidsNet, Mss_Tare AS PoidsTare, No_Prvn AS Destination, '0' + No_Bllt AS
NoBillet, No_pesee AS NoPesee, No_Site AS SiteBalance FROM
tblProduitAExtraireDepartExacModus INNER JOIN


TR_Depart_Trnspese_ExactModus
ON tblProduitAExtraireDepartExacModus.strNoProduitExactModus > TR_Depart_Trnspese_ExactModus.No_Prod WHERE
TR_Depart_Trnspese_ExactModus.Dt_Entree >= '" & Session("DateDebut") & "'


and
TR_Depart_Trnspese_ExactModus.Dt_Sortie <= '" & Session("DateFin") & "'"
cmpVPC.FillDataSet(dsVPC, "tblTransDepart")

cmpVPC.daVPC.SelectCommand.CommandText = "SELECT * FROM
tblContratAExtraireArriveCOPE5000"
cmpVPC.FillDataSet(dsVPC, "tblContratAExtraireArriveCOPE5000")

cmpVPC.daVPC.SelectCommand.CommandText = "SELECT * FROM
tblContratAExtraireArriveSFK"
cmpVPC.FillDataSet(dsVPC, "tblContratAExtraireArriveSFK")

cmpCOPE5000.daCOPE5000.SelectCommand.CommandText = "SELECT
Facturation.CodeFeuillet AS CodeFeuillet, Facturation.DateEntree AS
DateEntree, Facturation.IDUsine AS UsineReception, Usine.Nom AS
UsineReception, Facturation.NoBillet AS NoBillet,


TransactCopeau.MasseBrute
AS PoidsBrut, TransactCopeau.MasseNette AS PoidsNet, Contrat.Code AS
CodeContrat, Contrat.Description AS DescContratDepart FROM ((Facturation


LEFT
JOIN Usine ON Facturation.IDUsine = Usine.ID) INNER JOIN TransactCopeau ON
Facturation.IDTypeTransact = TransactCopeau.ID) LEFT JOIN Contrat ON
Facturation.IDContrat = Contrat.ID WHERE (((CONVERT(DateTime,
Replace(CONVERT(Varchar(10), Facturation.DateEntree, 102),'/','-')) >= '"


&
Session("DateDebut") & "')))"
cmpCOPE5000.FillDataSetCOPE5000(dsVPC, "tblTransArriveEtape1")


'''' C'est à partir d'ici que je voudrais faire mon SELECT avec mes


DataTable
'''' pour ne pas faire de boucle pour être beaucoup plus performant car
'''' présentement cela n'est pas fort.
'''
''' Je dois faire une boucle dans chacun des mes DataTable pour passé
chacune des lignes pour ensuite l'ajouter dans un DataTable final.
'''
'''
'''
'''
For a = 0 To
dsVPC.Tables("tblContratAExtraireArriveCOPE5000").Rows.Count - 1
For y = 0 To dsVPC.Tables("tblTransArriveEtape1").Rows.Count -


1
If Not
(dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeContrat")) Is
DBNull.Value Then
If



Trim(dsVPC.Tables("tblContratAExtraireArriveCOPE5000").Rows(a).Item("strCont
rat"))
= Trim(dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeContrat"))


Then
Dim workTable As DataTable > dsVPC.Tables("tblTransArrive")
Dim workRow As DataRow = workTable.NewRow()
workRow("CodeFeuillet") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeFeuillet")
workRow("DateEntree") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("DateEntree")
workRow("UsineReception") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("UsineReception")
workRow("DescReception") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("DescReception")
workRow("CodeContrat") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeContrat")
workRow("DescContratDepart") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("DescContratDepart")
workRow("NoBillet") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("NoBillet")
workRow("PoidsBrut") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("PoidsBrut")
workRow("PoidsNet") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("PoidsNet")
dsVPC.Tables("tblTransArrive").Rows.Add(workRow)
End If
End If
Next
Next

a = 0
y = 0
For a = 0 To


dsVPC.Tables("tblContratAExtraireArriveSFK").Rows.Count
- 1
For y = 0 To dsVPC.Tables("tblTransArriveEtape1").Rows.Count -


1
If Not
(dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeContrat")) Is
DBNull.Value Then
If



Trim(dsVPC.Tables("tblContratAExtraireArriveSFK").Rows(a).Item("strContrat")
)
= Trim(dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeContrat"))


Then
Dim workTable As DataTable > dsVPC.Tables("tblTransArrive")
Dim workRow As DataRow = workTable.NewRow()
workRow("CodeFeuillet") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeFeuillet")
workRow("DateEntree") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("DateEntree")
workRow("UsineReception") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("UsineReception")
workRow("DescReception") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("DescReception")
workRow("CodeContrat") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("CodeContrat")
workRow("DescContratDepart") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("DescContratDepart")
workRow("NoBillet") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("NoBillet")
workRow("PoidsBrut") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("PoidsBrut")
workRow("PoidsNet") > dsVPC.Tables("tblTransArriveEtape1").Rows(y).Item("PoidsNet")
dsVPC.Tables("tblTransArrive").Rows.Add(workRow)
End If
End If
Next
Next

a = 0
y = 0
If dsVPC.Tables("tblTransArrive").Rows.Count >= 1 Then
For a = 0 To dsVPC.Tables("tblTransDepart").Rows.Count - 1
cmpVPC.daVPC.SelectCommand.CommandText = "SELECT


Date_Entree
AS DtEntree, Date_Sortie AS DTSortie, Produit, Poids_Brut AS PoidsBrut,
Poids_Net AS PoidsNet, Poids_Tare AS PoidsTare, Destination, '0' +


Feuillet
AS NoBillet, Numero AS NoPesee, No_Site AS SiteBalance FROM
tblProduitAExtraireDepartBB INNER JOIN TR_Depart_Transact_BB ON
tblProduitAExtraireDepartBB.strNoProduitBB = TR_Depart_Transact_BB.Produit
WHERE TR_Depart_Transact_BB.Date_Entree >= '" & Session("DateDebut") & "'


and
TR_Depart_Transact_BB.Date_Sortie <= '" & Session("DateFin") & "'"
cmpVPC.FillDataSet(dsVPC, "tblTransDepart")

For y = 0 To dsVPC.Tables("tblTransArrive").Rows.Count - 1
i = 0
If Not
(dsVPC.Tables("tblTransDepart").Rows(a).Item("NoBillet")) Is DBNull.Value


Then
If
Trim(dsVPC.Tables("tblTransDepart").Rows(a).Item("NoBillet")) > Trim(dsVPC.Tables("tblTransArrive").Rows(y).Item("CodeFeuillet")) Then
i = 1
Exit For
End If
Else
i = 0
Exit For
End If
Next

If i = 0 Then
Dim workTable As DataTable dsVPC.Tables("tblTransFinal")
Dim workRow As DataRow = workTable.NewRow()
workRow("SiteBalance") > dsVPC.Tables("tblTransDepart").Rows(a).Item("SiteBalance")
workRow("Dt_Entree") > Mid(dsVPC.Tables("tblTransDepart").Rows(a).Item("DtEntree"), 1, 10)
workRow("Hr_Entree") > Mid(dsVPC.Tables("tblTransDepart").Rows(a).Item("DtEntree"), 12, 8)
workRow("Destination") > dsVPC.Tables("tblTransDepart").Rows(a).Item("Destination")
workRow("NoBillet") > dsVPC.Tables("tblTransDepart").Rows(a).Item("NoBillet")
workRow("PoidsBrut") > dsVPC.Tables("tblTransDepart").Rows(a).Item("PoidsBrut")
dsVPC.Tables("tblTransFinal").Rows.Add(workRow)
End If
Next
Else
For a = 0 To dsVPC.Tables("tblTransDepart").Rows.Count - 1
Dim workTable As DataTable = dsVPC.Tables("tblTransFinal")
Dim workRow As DataRow = workTable.NewRow()
workRow("SiteBalance") > dsVPC.Tables("tblTransDepart").Rows(a).Item("SiteBalance")
workRow("Dt_Entree") > Mid(dsVPC.Tables("tblTransDepart").Rows(a).Item("DtEntree"), 1, 10)
workRow("Hr_Entree") > Mid(dsVPC.Tables("tblTransDepart").Rows(a).Item("DtEntree"), 12, 8)
workRow("Destination") > dsVPC.Tables("tblTransDepart").Rows(a).Item("Destination")
workRow("NoBillet") > dsVPC.Tables("tblTransDepart").Rows(a).Item("NoBillet")
workRow("PoidsBrut") > dsVPC.Tables("tblTransDepart").Rows(a).Item("PoidsBrut")
dsVPC.Tables("tblTransFinal").Rows.Add(workRow)
Next
End If

a = 0
y = 0
If dsVPC.Tables("tblTransDepart").Rows.Count >= 1 Then
For a = 0 To dsVPC.Tables("tblTransArrive").Rows.Count - 1
For y = 0 To dsVPC.Tables("tblTransDepart").Rows.Count - 1
i = 0
If Not
(dsVPC.Tables("tblTransDepart").Rows(y).Item("NoBillet")) Is DBNull.Value


Then
If
Trim(dsVPC.Tables("tblTransArrive").Rows(a).Item("CodeFeuillet")) > Trim(dsVPC.Tables("tblTransDepart").Rows(y).Item("NoBillet")) Then
i = 1
Exit For
End If
Else
i = 0
Exit For
End If
Next

If i = 0 Then
Dim workTable As DataTable dsVPC.Tables("tblTransFinal")
Dim workRow As DataRow = workTable.NewRow()
workRow("SiteBalance") > dsVPC.Tables("tblTransArrive").Rows(a).Item("DescContratDepart")
workRow("Destination") > dsVPC.Tables("tblTransArrive").Rows(a).Item("UsineReception")
workRow("Dt_Arrivee") > Mid(dsVPC.Tables("tblTransArrive").Rows(a).Item("DateEntree"), 1, 10)
workRow("Hr_Arrivee") > Mid(dsVPC.Tables("tblTransArrive").Rows(a).Item("DateEntree"), 12, 8)
workRow("NoBillet") > dsVPC.Tables("tblTransArrive").Rows(a).Item("NoBillet")
workRow("PoidsBrut") > dsVPC.Tables("tblTransArrive").Rows(a).Item("PoidsBrut")
dsVPC.Tables("tblTransFinal").Rows.Add(workRow)
End If
Next
Else
For a = 0 To dsVPC.Tables("tblTransArrive").Rows.Count - 1
Dim workTable As DataTable = dsVPC.Tables("tblTransFinal")
Dim workRow As DataRow = workTable.NewRow()
workRow("SiteBalance") > dsVPC.Tables("tblTransArrive").Rows(a).Item("DescContratDepart")
workRow("Destination") > dsVPC.Tables("tblTransArrive").Rows(a).Item("UsineReception")
workRow("Dt_Arrivee") > Mid(dsVPC.Tables("tblTransArrive").Rows(a).Item("DateEntree"), 1, 10)
workRow("Hr_Arrivee") > Mid(dsVPC.Tables("tblTransArrive").Rows(a).Item("DateEntree"), 12, 8)
workRow("NoBillet") > dsVPC.Tables("tblTransArrive").Rows(a).Item("NoBillet")
workRow("PoidsBrut") > dsVPC.Tables("tblTransArrive").Rows(a).Item("PoidsBrut")
dsVPC.Tables("tblTransFinal").Rows.Add(workRow)
Next
End If




crReportDocument.Load(Server.MapPath("rptRapportVerification.rpt"))

paramFieldDateDebut.ParameterFieldName = "DateDebut"
discreteValDateDebut.Value = Session("DateDebut")
paramFieldDateDebut.CurrentValues.Add(discreteValDateDebut)
paramFieldsDateDebut.Add(paramFieldDateDebut)




crReportDocument.DataDefinition.ParameterFields.Item(0).ApplyCurrentValues(p
aramFieldDateDebut.CurrentValues)

paramFieldDateFin.ParameterFieldName = "DateFin"
discreteValDateFin.Value = Session("DateFin")
paramFieldDateFin.CurrentValues.Add(discreteValDateFin)
paramFieldsDateFin.Add(paramFieldDateFin)




crReportDocument.DataDefinition.ParameterFields.Item(1).ApplyCurrentValues(p
aramFieldDateFin.CurrentValues)

crReportDocument.SetDataSource(dsVPC)

Fname = "C:exports" & Session.SessionID.ToString & ".pdf"
crDiskFileDestinationOptions = New DiskFileDestinationOptions
crDiskFileDestinationOptions.DiskFileName = Fname

With crReportDocument.ExportOptions
.DestinationOptions = crDiskFileDestinationOptions
.ExportDestinationType = ExportDestinationType.DiskFile
.ExportFormatType = ExportFormatType.PortableDocFormat
End With

crReportDocument.Export()

Response.ClearContent()
Response.ClearHeaders()
Response.ContentType = "application/pdf"
Response.WriteFile(Fname)
Response.Flush()
Response.Close()

System.IO.File.Delete(Fname)
End Sub



Avatar
Zoury
Salut !

Étant donné qu'un dataadapter demande sur qu'elle connection on travail,
je
dois faire le remplissage de mes 2 DataTable en 2 section.



Un DataTable des données de la première base de données.
Un 2e DataTable des données de l'autre base de données.
Ensuite, comme mes données que j'ai besoin sont dans chacun des 2
DataTable,
je veux travailler avec ses 2 DataTables.



Si j'ai bien compris, tu pourrais placer tes deux DataTable dans le même
DataSet et ajouter une DataRelation sur la/les clé(s).

Ce message montre la technique..
http://groups.google.com/group/microsoft.public.dotnet.framework.adonet/browse_frm/thread/2308de82e647b725/8b2b154ce787b4dc?tvc=1&qÚtaadapter+%2Bquery+%2B%22multiple+databases%22+group:*.dotnet.*&hl=fr#8b2b154ce787b4dc

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
aitoz
Question bête ! quelles sont tes différentes base de données ?
Si tu as Oracle ou SQLServer d'un coté tu peux peut etre faire ton travail
de relation a travers des tables temporaires et tes traitements dans une
procédure stockées.
Et du coup tu n'aurais qu'a envoyer des paramètres à partir de ton
application.
Ca a énormément d'avantage.
Ton serveur travail a la place de ton poste et la lecture et mise a jour de
ton code est bien plus aisée.

Tu dis que tu as un gros volume de traitement, tu ne dois pas utiliser
ACCESS, alors pourquoi ne pas lier les base entre elles ???
1 2