2009-07-13 2 views
0

Пожалуйста, помогите мне исправить следующий запрос:Синтаксис запросов ошибка

SQL = "insert into tblContract (Empid, Start1, Finish1, Store1, " & _ 
        "Start2, Finish2, Store2) " & _ 
     "values ('" & Me.txtEmpNo.Value & _ 
        "',select max(testid) FROM tbltesting,'" & _  
        Me.txtContSunStart1.Value & "', '" & _ 
        Me.txtContSunFinish1.Value & "','" & _ 
        Me.txtContSunStore1.Value & "','" & _ 
        Me.txtContSunStart2.Value & "', '" & _ 
        Me.txtContSunFinish2.Value & "','" & _ 
        Me.txtContSunStore2.Value & "')" 

Проблема здесь:

select max(testid) FROM tbltesting 

Любые другие варианты?

ответ

2

подзапросы должны быть заключены в круглых скобках: (select max(testid) FROM tbltesting)

Обратите внимание, что ваш SQL двигатель, скорее всего, не поддерживают подзапросы в INSERT заявления, так что вы должны вставить с помощью INSERT...SELECT запроса вместо.

+0

его говорит Ошибка компиляции аргумент не факультативный – 2009-07-13 13:12:19

1

Просто удалите VALUES:

SQL = " 
     INSERT INTO tblContract (Empid, Start1, Finish1, Store1, Start2, Finish2, Store2) 
     SELECT " & Me.txtEmpNo.Value & "', MAX(testid), '" & 
     Me.txtContSunStart1.Value & "', '" & Me.txtContSunFinish1.Value & "','" & 
     Me.txtContSunStore1.Value & "','" & Me.txtContSunStart2.Value & "', '" & 
     Me.txtContSunFinish2.Value & "','" & Me.txtContSunStore2.Value & "' " & 
     "FROM tbltesting'" 

Поскольку у вас есть 7 целевые поля и 8SELECT список выражений, это не будет компилироваться, пока вы не предоставите дополнительное поле в предложении INSERT где вы хотите, чтобы ваш MAX(testid) пойти в ,

+0

Он имеет список невыбранных значений ... –

+0

@ Джонатан: это вполне возможно поместите их в список выбора так же хорошо – Quassnoi

+0

Не могли бы вы переписать весь запрос ?? – 2009-07-13 13:04:46

1

Если что-то будет работать, вам придется вставлять подзапрос внутри дополнительного слоя скобки:

INSERT INTO SomeTable(Col1, Col2, Col3) 
    VALUES(val1, (SELECT MAX(testid) FROM tbltesting), val3); 

Имейте в виду, что вы уязвимы для атак SQL Injection.


Использование IBM Informix Dynamic Server 11.50 в базе данных с «таблицей элементов», следующих работ:

create temp table t(i integer, j integer, k integer); 
insert into t values(1, (select max(atomic_number) from elements), 2); 
select * from t; 

1 118  2 

Это правильно, учитывая текущие данные в таблице элементов.

+0

его говорит Ошибка компиляции ошибки необязательно – 2009-07-13 12:59:35

+0

Обратите внимание на ответ от @oneday, если: у вас есть несоответствие между количеством столбцов и количеством предоставленных значений. Сообщение об ошибке компиляции не является необязательным, может быть связано с этим несоответствием. –

+0

нет нет .. если запрос не работает. Даже я даю такое же количество столбцов – 2009-07-13 13:33:02

1

Вам необходимо переписать свой VALUES в качестве запроса SELECT.

У вас есть семь столбцов в вашем пункте INSERT и восемь в вашем пункте VALUES. Из названий столбцов я думаю, что ваш подзапрос

select max(testid) FROM tbltesting 

отсутствует пункт назначения. Предполагая, что это можно назвать starting_testid; также угадывание типы данных (Access ядро ​​базы данных ANSI-92 Режим запроса синтаксиса):

CREATE PROCEDURE AddContract 
(
:Empid INTEGER, 
:Start1 DATETIME, 
:Finish1 DATETIME, 
:Store1 VARCHAR(20), 
:Start2 DATETIME, 
:Finish2 DATETIME, 
:Store2 VARCHAR(20) 
) 
AS 
insert into tblContract 
( 
Empid, starting_testid, 
Start1, Finish1, Store1, 
Start2, Finish2, Store2 
) 
SELECT :Empid, max(testid), 
     :Start1, :Finish1, :Store1, 
     :Start2, :Finish2, :Store2 
    FROM tbltesting; 
+0

Хорошо сделано, выявляя несоответствие между количеством названных столбцов и количеством значений. –

+0

Стандартный SQL потребует предложение GROUP BY, когда вы смешиваете агрегированные и неагрегатные значения в списке выбора. Это работает нормально в M Access или MS SQL Server? –

+0

no no .. если запрос не работает. Даже я даю такое же количество столбцов. – 2009-07-13 13:27:46

Смежные вопросы