Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Использование INSERT к файлам *.DBF (число прочтений - 1462 )
Kondarat
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 83
Зарегистрирован: 21. Декабря 2007
Использование INSERT к файлам *.DBF
20. Июля 2009 :: 13:03
Печать  
Есть внешнее хранилище, именно файл *.DBF
Все хорошо с запросами на выборку с использованием 1CPP.
Однако не могу выполнить запрос на модификацию. Вот такой простой запрос :
Код
Выбрать все
	сДатаКонца = Формат(ДатаКонца, "ДДДММГГГГ");
	сДатаКонца = СтрЗаменить(сДатаКонца, ".", "-");

	ТекстЗапроса = "
	|INSERT INTO BDDRIVE (Driver, DateWr)
	|VALUES (" + "'" + КодВодителя + "', Date('" + сДатаКонца +"'))";

	Запрос =База.СоздатьКоманду();
	Запрос.Выполнить(ТекстЗапроса);

 



выдает такую ошибку:
: FAILED! ICommandText::Execute(): Too few arguments.
Замечено, что это связано с преобразованием дату. Может кто поможет разрулить сию проблему?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Использование INSERT к файлам *.DBF
Ответ #1 - 20. Июля 2009 :: 16:56
Печать  
ТекстЗапроса = "
     |INSERT INTO BDDRIVE ('Driver', 'DateWr')
     |VALUES (" + "'" + КодВодителя + "', Date('" + сДатаКонца +"'))";

кавычки для столбцов.

А также должны быть заполнены ВСЕ поля - возможно "пустыми" значениями.

Если встречаются русские буквы - в общем случае возможна порча CDX


  
Наверх
 
IP записан
 
Kondarat
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 83
Зарегистрирован: 21. Декабря 2007
Re: Использование INSERT к файлам *.DBF
Ответ #2 - 21. Июля 2009 :: 10:35
Печать  
kiruha писал(а) 20. Июля 2009 :: 16:56:
ТекстЗапроса = "
     |INSERT INTO BDDRIVE ('Driver', 'DateWr')
     |VALUES (" + "'" + КодВодителя + "', Date('" + сДатаКонца +"'))";

кавычки для столбцов.

А также должны быть заполнены ВСЕ поля - возможно "пустыми" значениями.

Если встречаются русские буквы - в общем случае возможна порча CDX





Однако немного не так. CDX для этого файла вообще не создается. Кавычки для столбцов не нужны. Единственный затык - записать дату в поле с типом дата

Вот такой запрос все добавляет без проблем
Код
Выбрать все
	ТекстЗапроса = "
		|INSERT
		|INTO BDDRIVE (Driver,DateWr,Stus,DateDoc,NomDoc,Predst,Vec,Sum)
		|
		|VALUES (" + "'" + КодВодителя + "'," +
					 "'" +ДатаДобавления + "'," +
						   тзДокументы.СостояниеОбъекта + "," +
					 "'" + Строка(тзДокументы.ДатаДок) + "'," +
					 "'" + тзДокументы.НомерДок + "'," +
					 "'" + тзДокументы.Док + "'," +
						   тзДокументы.Масса + "," +
						   тзДокументы.Сумма + ")";

 



где DateWr - поле в файле с типом строка и соответсвенно ДатаДобавления для него - строка.

А вот такой ни в какую не работает. Точнее он выполняется без ошибок, нов поле DateWr -  пусто. Здесь это поле с типом Дата
Код
Выбрать все
		ДатаДобавления = "'20090721'";
		ТекстЗапроса = "
		|INSERT
		|INTO BDDRIVE (Driver,DateWr,Stus,DateDoc,NomDoc,Predst,Vec,Sum)
		|
		|VALUES (" + "'" + КодВодителя + "'," +
					 "CAST(" +ДатаДобавления+ " AS Date)," +
						   тзДокументы.СостояниеОбъекта + "," +
					 "'" + Строка(тзДокументы.ДатаДок) + "'," +
					 "'" + тзДокументы.НомерДок + "'," +
					 "'" + тзДокументы.Док + "'," +
						   тзДокументы.Масса + "," +
						   тзДокументы.Сумма + ")";

 



Как правильно преобразовать дату?










  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Использование INSERT к файлам *.DBF
Ответ #3 - 21. Июля 2009 :: 11:45
Печать  
Код
Выбрать все
{d '2009-07-21'} 

  
Наверх
 
IP записан
 
Kondarat
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 83
Зарегистрирован: 21. Декабря 2007
Re: Использование INSERT к файлам *.DBF
Ответ #4 - 21. Июля 2009 :: 15:05
Печать  
leov-001 писал(а) 21. Июля 2009 :: 11:45:
Код
Выбрать все
{d '2009-07-21'} 



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