implicit conversion from sql_variant to nvarchar

Discussion of open issues, suggestions and bugs regarding UniDAC (Universal Data Access Components) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
ertank
Posts: 172
Joined: Wed 13 Jan 2016 16:00

implicit conversion from sql_variant to nvarchar

Post by ertank » Tue 19 Jul 2016 10:24

Hello,

I have below table in an MS-SQL 2014 64bit database:

Code: Select all

USE [testDB]
GO

/****** Object:  Table [dbo].[SAYIMDETAY_TEMP]    Script Date: 19.07.2016 13:18:04 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[SAYIMDETAY_TEMP](
	[ID] [bigint] IDENTITY(1,1) NOT NULL,
	[sayimbaslikbaglanti] [nvarchar](39) NOT NULL,
	[aktif] [nvarchar](1) NOT NULL,
	[DosyaAdi] [nvarchar](250) NOT NULL,
	[ElTerminaliKayitId] [bigint] NOT NULL,
	[islemturu] [nvarchar](2) NULL,
	[adreskodu] [nvarchar](30) NULL,
	[belgeno] [nvarchar](30) NOT NULL,
	[belgetarihi] [date] NOT NULL,
	[BelgeAdi] [nvarchar](30) NULL,
	[LokasyonKodu] [nvarchar](30) NOT NULL,
	[SSCC] [nvarchar](30) NULL,
	[SSCCKapandi] [nchar](1) NULL,
	[Barkod] [nvarchar](30) NOT NULL,
	[Miktar] [float] NOT NULL,
	[OlcuBirimi] [nvarchar](10) NULL,
	[Kontrolsuz] [nvarchar](1) NOT NULL,
	[TerminalId] [nvarchar](30) NULL,
	[KullaniciKodu] [nvarchar](30) NULL,
	[OkutmaTarihSaati] [datetime] NOT NULL,
	[AktarimTarihSaati] [datetime] NOT NULL,
	[AktaranKullanici] [nvarchar](30) NOT NULL,
	[SeriNo] [nvarchar](25) NULL,
	[Lot] [nvarchar](25) NULL,
	[SKT] [nvarchar](10) NULL,
	[Eslesti] [nvarchar](1) NULL,
	[Nakledildi] [nvarchar](1) NULL,
	[kayitdamga] [uniqueidentifier] NOT NULL,
	[tarihdamga] [timestamp] NOT NULL,
	[priority] [dbo].[tamsayi] NULL,
	[firmnmbr] [dbo].[tamsayi] NULL,
	[firmyear] [dbo].[tamsayi] NULL,
	[firstuser] [dbo].[string20] NULL,
	[firstdate] [dbo].[tarih] NULL,
	[edituser] [dbo].[string20] NULL,
	[editdate] [dbo].[tarih] NULL,
 CONSTRAINT [PK_SAYIMDETAY_TEMP] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[SAYIMDETAY_TEMP] ADD  DEFAULT ('E') FOR [aktif]
GO

ALTER TABLE [dbo].[SAYIMDETAY_TEMP] ADD  DEFAULT (newid()) FOR [kayitdamga]
GO

ALTER TABLE [dbo].[SAYIMDETAY_TEMP] ADD  DEFAULT (substring(isnull(suser_sname(),''),(1),(20))) FOR [firstuser]
GO

ALTER TABLE [dbo].[SAYIMDETAY_TEMP] ADD  DEFAULT (getdate()) FOR [firstdate]
GO
I have below SQL to reproduce the problem assigned to a UniQuery.SQL at design time:

Code: Select all

insert into [SAYIMDETAY_TEMP](sayimbaslikbaglanti)
values(:sayimbaslikbaglanti)
I have below code which produces subject exception:

Code: Select all

procedure TForm13.Button2Click(Sender: TObject);
begin
  // Below you will get exception
  UniQuery1.Prepare();
end;
I can reproduce the problem on different MS-SQL databases. I suspect problem is related with "User-Defined Data Types".

I can provide a sample database and project for your convenience.

ViktorV
Devart Team
Posts: 3168
Joined: Wed 30 Jul 2014 07:16

Re: implicit conversion from sql_variant to nvarchar

Post by ViktorV » Tue 19 Jul 2016 11:32

To solve the issue, please try to set the parameter's datatype before calling the TUniQuery.Prepare method. For example:

Code: Select all

   UniQuery1.ParamByName('sayimbaslikbaglanti').DataType := ftWideString;

ertank
Posts: 172
Joined: Wed 13 Jan 2016 16:00

Re: implicit conversion from sql_variant to nvarchar

Post by ertank » Fri 29 Jul 2016 00:04

Thanks Victor, That did solve my problem.

ViktorV
Devart Team
Posts: 3168
Joined: Wed 30 Jul 2014 07:16

Re: implicit conversion from sql_variant to nvarchar

Post by ViktorV » Fri 29 Jul 2016 08:35

It is good to see that the problem has been solved.
Feel free to contact us if you have any further questions about UniDAC.

Post Reply