синтаксис Access SQL

n.e.gative
Дата: 16.12.2011 10:42:07
Необходимо получить набор строк с значениями одного из полей следующего вида - "MNN", где M - значение комбобокса на форме (изменяемый параметр запроса), а N - значения в диапазоне 1-9. Использую:
Like 'Left(' & Формы!Форма!Комбобокс & ',1)[1-9][1-9]'
, но не получаю желаемого результата (, подскажите пожалуйста что я делаю не так?)
n.e.gative
Дата: 16.12.2011 10:53:58
Ссори), нашел решение
Like '' & Left (Формы!Форма!Контрол;1) & '[1-9][1-9]'
alvk
Дата: 16.12.2011 10:59:49
n.e.gative,

 WHERE mid('" & Формы!Форма!Комбобокс & "',2,1) like '[1-9]'


И так со всеми параметрами через and. Речь идёт о VBA.
n.e.gative
Дата: 16.12.2011 15:13:18
Спасибо). Созрел еще один вопрос, пытаюсь задавать параметр для запроса по условию
IIF (Формы!Форма!Контрол is not null;Like '...';"")
, пробовал как IIF так и Switch, ничего не выходит. Если в значении возвращаемого параметра задать как целое число (идентичное значению этого поля у какой либо записи) - возвращает её. Таким образом, необходимо по условию задать параметр для запроса. Заранее спасибо.
alvk
Дата: 16.12.2011 16:38:51
n.e.gative,

если контрол не пустой, тогда кто содержит три точки?
n.e.gative
Дата: 16.12.2011 16:47:09
Другой контрол)
alvk
Дата: 17.12.2011 03:59:26
n.e.gative
Другой контрол)


два пишем, три в уме? iif о вашем другом контроле должен догадаться? Поздравляю с изобретением искусственного интелекта, пройдите за премией.
volfram
Дата: 28.11.2012 18:58:04
Не хочу создавать новую тему, но скажите, пожалуйста, кому не сложно, как sql-запрос будет выглядеть в ACCESS, просто постоянно грузить access-базу в sql выполнять запрос, выгружать обратно очень геморно, пытался сам перестроить, но моих знаний не хватило, а по каждому пункту спрашивать яндекс...спустя час я так и не нашел как перестроить:
CREATE TABLE #tcc(
[id] [int] NOT NULL

так что прошу, кому не сложно, переведите запрос MS-SQL в Access-SQL..запрос:
+
CREATE procedure [dbo].[sp_tcc_key]
@tbl_out nvarchar(255), -- название выходящей таблицы
@fio_flag bit = 0 -- 0: ФИО находятся в поле fio; 1: ФИО отдельно:
-- фамилия в поле f, имя в i, отчество в o
--with encryption
as
set nocount on

If Object_Id(N'[tempdb]..[#tcc]') is Not Null drop table #tcc

CREATE TABLE #tcc(
[id] [int] NOT NULL,
[partid] [int] NULL,
[fio] [varchar](254) NOT NULL,
[addr] [varchar](254) NOT NULL,
[f] [varchar](254) NULL,
[i] [varchar](254) NULL,
[o] [varchar](254) NULL,
[ZIP] [char](6) NULL,
[rowid] [uniqueidentifier] NOT NULL,
[ka] [char](10) NULL,
[kf] [char](10) NULL,
[ki] [char](6) NULL,
[ko] [char](1) NULL,
[kp] [char](3) NULL,
[KEY] [char](30) NULL,
[HASHFAM] [char](32) NULL,
[HASHIM] [char](32) NULL,
[HASHOTCH] [char](32) NULL,
[zaddr] [varchar](254) NULL,
[zfio] [varchar](254) NULL,
CONSTRAINT [PK_tcc_tmp] 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]

insert #tcc (id,partid,fio,addr,f,i,o,ZIP,rowid)
select id,partid,fio,addr,f,i,o,ZIP,rowid from tcc;

--/*
update #tcc set zaddr = ltrim(rtrim(addr))

update #tcc set zaddr = dbo.fn_replace_notdigits(zaddr)

while exists(select 1 from #tcc where CHARINDEX('--',zaddr)>0) begin
update #tcc set zaddr = REPLACE(zaddr,'--','-') where CHARINDEX('--',zaddr)>0
end;

update #tcc set zaddr = LEFT(zaddr,LEN(zaddr)-1) where RIGHT(zaddr,1)='-'

update #tcc set zaddr = RIGHT(zaddr,LEN(zaddr)-1) where LEFT(zaddr,1)='-'

update #tcc set ka=left(zaddr,10), kp=left(ZIP,3)

--*/

--/*
if @fio_flag = 1 begin
update #tcc set zfio = ltrim(rtrim(ISNULL(f,''))) + ' ' + ltrim(rtrim(ISNULL(i,''))) + ' ' + ltrim(rtrim(ISNULL(o,'')))
end else begin
update #tcc set zfio = ltrim(rtrim(fio))
end;

while exists(select 1 from #tcc where CHARINDEX(' ',zfio)>0) begin
update #tcc set zfio = REPLACE(zfio,' ',' ') where CHARINDEX(' ',zfio)>0
end;

delete from #tcc where PATINDEX('%[^А-Я -]%',zfio)>0

delete from #tcc where PATINDEX('% [БВГДЖЗЙКЛМНПРСТФХЦЧШЩЪЬ] %',zfio)>0

delete from #tcc where PATINDEX('[БВГДЖЗЙКЛМНПРСТФХЦЧШЩЪЬ] %',zfio)>0

delete from #tcc where PATINDEX('[АЕЁИОУЫЭЮЯ] %',zfio)>0 and ASCII(SUBSTRING(fio,PATINDEX('[АЕЁИОУЫЭЮЯ] %',zfio)+2,1)) not between ASCII('А') and ASCII('Я')

delete from #tcc where PATINDEX('% [АЕЁИОУЫЭЮЯ] %',zfio)>0 and ASCII(SUBSTRING(fio,PATINDEX('% [АЕЁИОУЫЭЮЯ] %',zfio)+3,1)) not between ASCII('А') and ASCII('Я')

update #tcc set zfio = UPPER(replace(zfio,'Ё','Е'))

update #tcc set zfio = REPLACE(zfio,' - ','-') where CHARINDEX(' - ',zfio)>0

update #tcc set zfio = REPLACE(zfio,'- ','-') where CHARINDEX('- ',zfio)>0

update #tcc set zfio = REPLACE(zfio,' -','-') where CHARINDEX(' -',zfio)>0

update #tcc set f='',i='',o=''

update #tcc set f=zfio, zfio='' where CHARINDEX(' ',zfio)=0

update #tcc set zfio = RIGHT(zfio,len(zfio) - CHARINDEX(' ',zfio)), f = LEFT(zfio, CHARINDEX(' ',zfio)-1) where CHARINDEX(' ',zfio)>0

update #tcc set i=zfio, zfio='' where CHARINDEX(' ',zfio)=0

update #tcc set zfio = RIGHT(zfio,len(zfio) - CHARINDEX(' ',zfio)), i = LEFT(zfio, CHARINDEX(' ',zfio)-1) where CHARINDEX(' ',zfio)>0

update #tcc set o = zfio

--*/

--/*
update #tcc set
kf=LEFT(f,10),
ki=LEFT(i,6),
ko=LEFT(o,1);

update #tcc set
HASHFAM=right(master.dbo.fn_varbintohexstr(HASHBYTES('md5',f)),32),
HASHIM=right(master.dbo.fn_varbintohexstr(HASHBYTES('md5',i)),32),
HASHOTCH=right(master.dbo.fn_varbintohexstr(HASHBYTES('md5',o)),32);

--*/

--/*
update #tcc set
[KEY] = kp + kf + ka + ki + ko;
--*/

exec('select id,partid,fio,addr,f,i,o,ZIP,rowid, [KEY], HASHFAM, HASHIM, HASHOTCH into ' + @tbl_out + ' from #tcc');

drop table #tcc; 
Сергей Лалов
Дата: 28.11.2012 19:01:52
volfram,

Аксесс больше одного выражения не потянет, либо SELECT,либо INSERT, либо UPDATE , DELETE или DROP. В вашем выражении присутствуют все типы операций . И они параметрические все. Получится множество маленьких запросов. В одном запросе для access SQL это воткнуть нереально. Либо перемудрить с функцией switch.
?????
Дата: 28.11.2012 19:08:11
exec [dbo].[sp_tcc_key] 'MyTable', 0