[dba-SQLServer] Combo Boxes not showing Recordset
David Emerson
newsgrps at dalyn.co.nz
Thu Aug 15 16:16:28 CDT 2019
Found the problem. For this database I called the primary keys in all
tables "ID" (on the request of the client's SQL developer). Access doesn't
seem to like this in a combobox recordset. Once I gave all primary keys
unique names the lists show as expected.
Regards
David
-----Original Message-----
From: dba-SQLServer [mailto:dba-sqlserver-bounces at databaseadvisors.com] On
Behalf Of David Emerson
Sent: Thursday, 15 August 2019 10:28 a.m.
To: 'Discussion concerning MS SQL Server'
Subject: Re: [dba-SQLServer] Combo Boxes not showing Recordset
I have just scripted and restored the database to SQL 2008 SR2 and it has
the same problem :(
-----Original Message-----
From: dba-SQLServer [mailto:dba-sqlserver-bounces at databaseadvisors.com] On
Behalf Of David Emerson
Sent: Wednesday, 14 August 2019 4:35 p.m.
To: 'Discussion concerning MS SQL Server'
Subject: Re: [dba-SQLServer] Combo Boxes not showing Recordset
Hi Paul,
Initially the value of the parameter is 0 and it is passing correctly and
working as it should.
When I run the stored procedure direct in SQL it returns the correct
records.
In Access I have checked the records in the recordset by looping through
them when the recordset is retrieved and the correct records are there -
they are just not showing in the combobox list.
David
-----Original Message-----
From: dba-SQLServer [mailto:dba-sqlserver-bounces at databaseadvisors.com] On
Behalf Of Paul Hartland via dba-SQLServer
Sent: Wednesday, 14 August 2019 4:25 p.m.
To: SQLServerList
Cc: Paul Hartland
Subject: Re: [dba-SQLServer] Combo Boxes not showing Recordset
David,
In the stored procedure what is the value of the parameter @DistributorID
and have you checked that both tables dbo.tblDistributor and
dbo.tblDistributorLossCode have that value in the dbo.tblDistributor.ID
<http://dbo.tbldistributor.id/> and dbo.tblDistributorLossCode.DistributorID
fields
Paul
On Wed, 14 Aug 2019, 04:27 David Emerson, <newsgrps at dalyn.co.nz> wrote:
> Hi Listers,
>
> Access 2010 accdb, SQL 2014 backend.
>
> I have a screen that gets recordsets from SQL using the following code:
>
> Dim rstTemp As ADODB.Recordset
>
> Set rstTemp = basRunDataObject("dbo.spfrmDistributorLossCodeFactor " &
> Nz(Me!cboFilter, 0), adCmdText)
> Set Me.Recordset = rstTemp
>
> Set rstTemp = rstTemp.NextRecordset
> Set Me!cboFilter.Recordset = rstTemp
>
> Set rstTemp = rstTemp.NextRecordset
> Set Me!cboDistributorLossCodeID.Recordset = rstTemp
>
> rstTemp.Close
> Set rstTemp = Nothing
>
> Me.UniqueTable = "dbo.tblDistributorLossCodeFactor"
> Me.ResyncCommand = "SELECT dbo.tblDistributorLossCodeFactor.* FROM
> dbo.tblDistributor INNER JOIN dbo.tblDistributorLossCode ON
> dbo.tblDistributor.ID = dbo.tblDistributorLossCode.DistributorID INNER
> JOIN
> dbo.tblDistributorLossCodeFactor ON dbo.tblDistributorLossCode.ID =
> dbo.tblDistributorLossCodeFactor.DistributorLossCodeID WHERE
> dbo.tblDistributorLossCodeFactor.ID = ?"
> Me.Requery
>
>
> The relevant part of the stored procedure is as follows:
>
> ALTER PROCEDURE [dbo].[spfrmDistributorLossCodeFactor]
> (
> @DistributorID bigint
> )
> AS
> BEGIN
> SET NOCOUNT ON;
>
> SELECT dbo.tblDistributorLossCodeFactor.*
> FROM dbo.tblDistributor INNER JOIN dbo.tblDistributorLossCode ON
> dbo.tblDistributor.ID = dbo.tblDistributorLossCode.DistributorID
> INNER JOIN dbo.tblDistributorLossCodeFactor ON
> dbo.tblDistributorLossCode.ID =
> dbo.tblDistributorLossCodeFactor.DistributorLossCodeID
> WHERE dbo.tblDistributor.ID = @DistributorID OR @DistributorID = 0
> ORDER BY dbo.tblDistributor.Name, dbo.tblDistributorLossCode.Code,
> dbo.tblDistributorLossCodeFactor.StartDate
>
> SELECT dbo.tblDistributor.ID, dbo.tblDistributor.Name AS Name,
> dbo.tblDistributor.RegistryCode AS Code, CASE WHEN
> dbo.tblDistributor.IsActive = 1 THEN 'Yes' ELSE 'No' END AS Active
> FROM dbo.tblDistributor
> ORDER BY dbo.tblDistributor.Name
>
> SELECT dbo.tblDistributorLossCode.ID,
> dbo.tblDistributorLossCode.Code, dbo.tblDistributor.Name AS Distributor
> FROM dbo.tblDistributor INNER JOIN dbo.tblDistributorLossCodeON
> dbo.tblDistributor.ID = dbo.tblDistributorLossCode.DistributorID
> WHERE dbo.tblDistributor.ID = @DistributorID OR @DistributorID = 0
> ORDER BY dbo.tblDistributorLossCode.Code, dbo.tblDistributor.Name
>
> /* SELECT dbo.tblDistributorLossCode.ID,
> dbo.tblDistributorLossCode.Code, 'None' AS Distributor
> FROM dbo.tblDistributorLossCode
> ORDER BY dbo.tblDistributorLossCode.Code
>
> */
>
>
> When the screen opens the combo box that uses the third record set has
> nothing in it. It shows the correct number of columns but there are no
> headers or data.
> If I replace the third record set with the remmed out recordset then the
> combo box shows the headers and data. The only difference in the
> statements
> is that there is not a link to a second table.
> The data for the screen and the first combo box show correctly. I have
> checked the records in the recordset by looping through them when the
> recordset is retrieved and the correct records are there - they are not
> showing in the combobox list.
>
> The PK/FK ID fields are all bigint. It tried changing them to int, and
> numeric(18,0) but neither helped.
>
> I have tried recreating the combobox but this didn't help. I have also
> decompiled, compacted and repaired.
>
> This same behaviour happens in similar screens where the source for a
combo
> box includes more than 1 table.
>
> Is this a peculiarity with SQL 2014? I have successfully used this method
> with SQL 2008.
>
> Regards
>
> David Emerson
> Dalyn Software Ltd
> Wellington, New Zealand
More information about the dba-SQLServer
mailing list