Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Что означает Ошибка SQL? (число прочтений - 12144 )
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Что означает Ошибка SQL?
09. Марта 2007 :: 10:00
Печать  
Делаю простейший запрос:
Код
Выбрать все
ТекстЗапроса = "INSERT INTO [Easy].[dbo]."+ИмяТаблицы+"
	| (ORG_NAME, SUBJECT_ID, SERIES, NUMBER, ERROR_DESC, IMPORTED, EDITED) VALUES(?, ?, ?, ?, ?, ?, ?)";

	Запрос.Подготовить(ТекстЗапроса);
	Запрос.ВыполнитьSQL_ИзТЗ(ТемпТЗ); 


Получаю ошибку:
Цитата:
Запрос.ВыполнитьSQL_ИзТЗ(ТемпТЗ);
{D:\1C CONFIGS\EXTFORMS\UNICUS\ЗАГРУЗКА ПРОТОКОЛОВ ИМПОРТА ИЗ XML.ERT(169)}: Произошла ошибка при выполнении запроса.                  
State 22018, native 0, message [Microsoft][ODBC SQL Server Driver]Недопустимое символьное значение для указания отклонения

Что это значит? Куда копать?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Что означает Ошибка SQL?
Ответ #1 - 09. Марта 2007 :: 10:04
Печать  
для начала параметры добавь
  

1&&2&&3
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Что означает Ошибка SQL?
Ответ #2 - 09. Марта 2007 :: 11:04
Печать  
trad писал(а) 09. Марта 2007 :: 10:04:
для начала параметры добавь

Из Хелпа по методу ВыполнитьSQL_ИзТЗ:
Цитата:
Параметры могут быть добавлены методом ДобПараметр / AddParam или построены ПостроитьПараметры / BuildParams. В случае если количество параметров равно нулю, происходит попытка построить параметры автоматически.

Цитата:
rc.Prepare("INSERT INTO MyTable (NAME, AGE, SALARY, DATEOFBIRTH) VALUES(?, ?, ?, ?)");
тз = СоздатьОбъект("ТаблицаЗначений");

тз.НоваяКолонка("NAME","Строка");
тз.НоваяКолонка("AGE","Число",4);      
тз.НоваяКолонка("SALARY","Число",18,2);
тз.НоваяКолонка("DATEOFBIRTH","Дата");

for i = 1 to 10 do
тз.НоваяСтрока();
       тз.NAME        = "Панферов Вартан";
       тз.AGE         = 28;
       тз.SALARY      = 1453.12;
       тз.DATEOFBIRTH = '17.11.1974';
       тз.НоваяСтрока();
       тз.NAME        = "Гусев Дмитрий";
       тз.AGE         = 23;
       тз.SALARY      = 1233.99;
       тз.DATEOFBIRTH = '09.03.1980';
enddo;          
rc.ExeSQL_FromTV(тз);

Профайлер показывает следующее:
Цитата:
SET FMTONLY ON select ORG_NAME,SUBJECT_ID,SERIES,NUMBER,ERROR_DESC,IMPORTED,EDITED from [Easy].[dbo].[_ImportErrorsStatement] where 1=2 SET FMTONLY OFF

и
Цитата:
declare @P1 int
set @P1=9
exec sp_prepare @P1 output, N'@P1 varchar(30),@P2 bigint,@P3 char(3),@P4 char(10),@P5 varchar(100),@P6 bit,@P7 bit', N'INSERT INTO [Easy].[dbo].[_ImportErrorsStatement]
(ORG_NAME, SUBJECT_ID, SERIES, NUMBER, ERROR_DESC, IMPORTED, EDITED) VALUES(@P1, @P2, @P3, @P4, @P5, @P6, @P7)', 1
select @P1
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Что означает Ошибка SQL?
Ответ #3 - 09. Марта 2007 :: 11:23
Печать  
Всем спасибо, разобрался. Просто при создании этой таблицы немного с типами данных и ключами напутал...
  
Наверх
 
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Что означает Ошибка SQL?
Ответ #4 - 15. Марта 2007 :: 05:27
Печать  
Не хочу создавать новую тему, надеюсь ни кто не против если я здесь спрошу? Улыбка
Код
Выбрать все
	текст="
	|INSERT INTO "+ИмяТаблицы+"
	|	(VAL,ISFOLDER)
	|VALUES
	|	(?, ?)
	|";
	//*
	РС.Подготовить(текст);
	РС.ВыполнитьSQL_ИзТЗ(тз,тз.КоличествоСтрок());
 


Цитата:
{F:\РАБ.ПАПКА\КОПИЯ PRBASIC2007\EXTFORMS\ВЕДОМОСТЬПОСОТРУДНИКАМ.ERT(139)}: DBFФильтры::ВставитьЗначения(Строка ИмяТаблицы=тмп509000327, ТаблицаЗначений тз=) : Произошла ошибка при формировании автоматических параметров.               
Необходимо выполнить подготовку запроса или проверить синтаксис!
State IM001, native 0, message [Microsoft][Диспетчер драйверов ODBC] Драйвер не поддерживает данной функции

Что это? База - ДБФ... Только не говорите, что ВыполнитьSQL_ИзТЗ только для sql  Плачущий
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Что означает Ошибка SQL?
Ответ #5 - 15. Марта 2007 :: 20:19
Печать  
Необходимо добавить параметры (ДобПараметр), т.к. этот драйвер не поддерживает автоматическое определение параметров.
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Что означает Ошибка SQL?
Ответ #6 - 16. Марта 2007 :: 02:48
Печать  
DmitrO писал(а) 15. Марта 2007 :: 20:19:
Необходимо добавить параметры (ДобПараметр), т.к. этот драйвер не поддерживает автоматическое определение параметров.

Спасибо. Так заработало:
Код
Выбрать все
	текст="CREATE TABLE "+ИмяТаблицы+".dbf (VAL CHAR(4),ISFOLDER NUMERIC(1,0));";
	РС.ВыполнитьИнструкцию(текст);
	//*
	текст="
	//|CREATE TABLE "+ИмяТаблицы+".dbf (VAL CHAR(4),ISFOLDER NUMERIC(1,0));
	|INSERT INTO "+ИмяТаблицы+"
	|	(VAL,ISFOLDER)
	|VALUES
	|	(?,?)
	|";
	//*
	РС.Подготовить(текст);
	РС.ДобПараметр(1,14,4,0);
	РС.ДобПараметр(1,2,1,0);
	РС.ВыполнитьSQL_ИзТЗ(тз,тз.КоличествоСтрок());
 


Но теперь такой вопрос:
Если передаётся сразу две sql-инструкции (например, create table и insert) разделённы ; , то выполняется только первая? жаль....  Нерешительный
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Что означает Ошибка SQL?
Ответ #7 - 16. Марта 2007 :: 03:32
Печать  
вот блин, а!
теперь без видимых причин начало вылетать
Цитата:
DBFФильтры::ВставитьЗначения(ТаблицаЗначений тз=, Строка ИмяТаблицы=F:\Рабпапка\PRBasic2007\tmp588484676) : Произошла ошибка при выполнении запроса.                  
State 22003, native 0, message [Microsoft][ODBC Visual FoxPro Driver]Numeric value out of range
РС.ВыполнитьSQL_ИзТЗ(тз,тз.КоличествоСтрок());

пробовал менять
Код
Выбрать все
РС.ДобПараметр(1,2,1,0); 


на
Код
Выбрать все
РС.ДобПараметр(1,[b]14[/b],1,0); 


и др. варианты... не помагает Плачущий
пробовал несколько 1cpp, в том числе и скачанную сегодня ночную сборку... в чём дело?
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Что означает Ошибка SQL?
Ответ #8 - 16. Марта 2007 :: 06:15
Печать  
А какое число ты туда устанавливаешь? У тебя длина = 1 (третий параметр)
  
Наверх
 
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Что означает Ошибка SQL?
Ответ #9 - 16. Марта 2007 :: 06:50
Печать  
JohnyDeath писал(а) 16. Марта 2007 :: 06:15:
А какое число ты туда устанавливаешь? У тебя длина = 1 (третий параметр)

вообще, в тестируемом примере в этой колонке тз значения по всем строкам = 0
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Что означает Ошибка SQL?
Ответ #10 - 16. Марта 2007 :: 06:56
Печать  
уже для пущей важности создаю вторую колонку тз так:
Код
Выбрать все
тз.НоваяКолонка(,"Число",1,0)
 


один хрен! Нерешительный
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Что означает Ошибка SQL?
Ответ #11 - 16. Марта 2007 :: 06:58
Печать  
сделал:
Цитата:
"CREATE TABLE "+ИмяТаблицы+".dbf (VAL CHAR(4),ISFOLDER NUMERIC(5,0));"

таже петрушка! Нерешительный Плачущий
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Что означает Ошибка SQL?
Ответ #12 - 16. Марта 2007 :: 07:09
Печать  
странно....
дбф'ки получаются разных размером....
стал пробовать открыть акцесом... там такая картина
хотя в ТЗ в первой колонке индификаторы видов расчетов, текстовые, по 4 символа.... в таблице видим такую хрень:
 IZ
OUF

1OV=

1OW
X
и тп.

Добавлено: блин, тут не видно, в акцесе некоторые символы вообще в виде квадратиков
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Что означает Ошибка SQL?
Ответ #13 - 16. Марта 2007 :: 08:02
Печать  
хотите сказать: баста, сливать воду, приплыли карапузики?! вроде как ни чего сложного не делаю... в чем проблема-то?
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Что означает Ошибка SQL?
Ответ #14 - 16. Марта 2007 :: 08:06
Печать  
убрал второе (числовое) поле вообще: и из создаваемой дбф, и из тз. Теперь:
Цитата:
DBFФильтры::ВставитьЗначения(ТаблицаЗначений тз=, Строка ИмяТаблицы=F:\Рабпапка\PRBasic2007\tmp604997381.dbf) : Произошла ошибка при выполнении запроса.                  

РС.ВыполнитьSQL_ИзТЗ(тз,тз.КоличествоСтрок());


вот блин то, а?
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать