Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Подскажите с подзапросом в DBF (число прочтений - 6869 )
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Подскажите с подзапросом в DBF
30. Октября 2006 :: 16:26
Печать  
научите, как правильно написать под VFPro конструкцию
Код
Выбрать все
select
SuTab.Value1
from (select Value1 from Tab) as SuTab 


у меня на это просто ругается
Код
Выбрать все
[Microsoft][ODBC Visual FoxPro Driver]Syntax error 

  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите с подзапросом в DBF
Ответ #1 - 30. Октября 2006 :: 19:56
Печать  
А что если написать так?:
Код
Выбрать все
select
Value1
from (select Value1 as  Value1 from Tab)  


ЗЫ
А почему бы не пользоваться OLE DB драйвером?
  
Наверх
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите с подзапросом в DBF
Ответ #2 - 30. Октября 2006 :: 22:06
Печать  
pvase писал(а) 30. Октября 2006 :: 19:56:
А почему бы не пользоваться OLE DB драйвером?

почему бы, перед тем как что то "рисовать", не подучить мат. часть?
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Подскажите с подзапросом в DBF
Ответ #3 - 30. Октября 2006 :: 22:25
Печать  
У меня такие запросы работают прекрасно. Возможно, у тебя какая-то проблема в реальном коде.
PS. Использую OLE DB.
  
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите с подзапросом в DBF
Ответ #4 - 30. Октября 2006 :: 23:00
Печать  
Uzhast писал(а) 30. Октября 2006 :: 22:25:
У меня такие запросы работают прекрасно. Возможно, у тебя какая-то проблема в реальном коде.
PS. Использую OLE DB.

можно рабочий пример?
вместе с тем как создаешь объект и выполняешь запрос...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Подскажите с подзапросом в DBF
Ответ #5 - 30. Октября 2006 :: 23:20
Печать  
Цитата:
можно рабочий пример?
вместе с тем как создаешь объект и выполняешь запрос...


Вот рабочий пример (немного неоптимально работает при получении остатков на конец месяца):
Код
Выбрать все
Процедура Сформировать()
	глТекущаяБаза = СоздатьОбъект ("OLEDBData");
	глСтрокаПрямогоПодключенияКБД = Шаблон ("Provider=VFPOLEDB.1; Mode=ReadWrite;
	|Data Source=[КаталогИБ ()];");

	глТекущаяБаза.Соединение (глСтрокаПрямогоПодключенияКБД);

	ДатаТА = ПолучитьДатуТА ();
	Если ДатаОстатков > ДатаТА Тогда
		ДатаОстатков = ДатаТА;
	КонецЕсли;

	Если ДатаОстатков = ДатаТА Тогда
		ДатаВыборкиОстатков = НачМесяца (ДатаОстатков);
		ОтчетНаТА = 1;
	Иначе
		ОтчетНаТА = 0;
		ДатаНачалаВременногоРасчета = НачМесяца (ДатаОстатков);
		ДатаВыборкиОстатков = ДобавитьМесяц (ДатаНачалаВременногоРасчета, -1);
	КонецЕсли;

	ТекстЗапроса = "
		|SELECT
		|	Взаиморасчеты.Клиент AS [Клиент $Справочник.Клиенты],
		|	SUM (Взаиморасчеты.Сумма) AS Сумма
		|FROM (
		|	SELECT
		|		$ВзаиморасчетыОстатки.Клиент AS Клиент,
		|		$ВзаиморасчетыОстатки.СуммаБазовая AS Сумма
		|	FROM
		|		$РегистрИтоги.Взаиморасчеты AS ВзаиморасчетыОстатки
		|	INNER JOIN $Справочник.Клиенты AS Клиенты ON $ВзаиморасчетыОстатки.Клиент = Клиенты.ID
		|	WHERE
		|		ВзаиморасчетыОстатки.Period = :ДатаВыборкиОстатков~~
		|		AND $ВзаиморасчетыОстатки.СуммаБазовая <> 0
		|";

	Если ОтчетНаТА = 0 Тогда
		ТекстЗапроса = ТекстЗапроса + "
			|	UNION ALL
			|	SELECT
			|		$ВзаиморасчетыДвижения.Клиент AS Клиент,
			|		SUM ($ВзаиморасчетыДвижения.СуммаБазовая) AS Сумма
			|	FROM
			|		$Регистр.Взаиморасчеты AS ВзаиморасчетыДвижения
			|	INNER JOIN $Справочник.Клиенты AS Клиенты ON $ВзаиморасчетыДвижения.Клиент = Клиенты.ID
			|	WHERE
			|		ВзаиморасчетыДвижения.Date BETWEEN :ДатаНачалаВременногоРасчета~~
			|		AND :ДатаОстатков~~
			|		AND $ВзаиморасчетыДвижения.СуммаБазовая <> 0
			|	GROUP BY
			|		$ВзаиморасчетыДвижения.Клиент
			|";
	КонецЕсли;

	ТекстЗапроса = ТекстЗапроса + "
		|) AS Взаиморасчеты
		|GROUP BY
		|	Взаиморасчеты.Клиент
		|";

	Запрос = глТекущаяБаза.СоздатьКоманду ();
	Запрос.УстановитьТекстовыйПараметр ("ДатаВыборкиОстатков", ДатаВыборкиОстатков);
	Если ОтчетНаТА = 0 Тогда
		Запрос.УстановитьТекстовыйПараметр ("ДатаОстатков", ДатаОстатков);
		Запрос.УстановитьТекстовыйПараметр ("ДатаВыборкиОстатков", ДатаВыборкиОстатков);
		Запрос.УстановитьТекстовыйПараметр ("ДатаНачалаВременногоРасчета", ДатаНачалаВременногоРасчета);
	КонецЕсли;

	Выборка = Запрос.ВыполнитьИнструкцию (ТекстЗапроса);
	Выборка.ВыбратьСтроку ();
КонецПроцедуры
 

  
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите с подзапросом в DBF
Ответ #6 - 30. Октября 2006 :: 23:23
Печать  
сенк... завтра попробую... я то через ODBCDataBase+ODBCRecordSet делаю...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите с подзапросом в DBF
Ответ #7 - 31. Октября 2006 :: 06:54
Печать  
Цитата:
сенк... завтра попробую... я то через ODBCDataBase+ODBCRecordSet делаю...

Еще во втором посте говорил о OLE DB.
ЗЫ
А мат часть почитать про OLE DB - неужели сложно? Подмигивание).
ЗЫ2
OLE DB с подзапросами работает гораздо лучше, ла и вложенность их практически неограниченная в отличие от ODBC драйвера.
  
Наверх
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите с подзапросом в DBF
Ответ #8 - 31. Октября 2006 :: 09:08
Печать  
не подскажете из-за чего может быть ошибка
Код
Выбрать все
БухБаза.ПрисоединитьИБ(КаталогБух,СтрокаСоединения);
{D:\BASE\ZIK\ASTEL\EXTFORMS\TEST.ERT(44)}: FAILED! IDataInitialize::GetDataSource(): Класс не зарегистрирован 

  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите с подзапросом в DBF
Ответ #9 - 31. Октября 2006 :: 09:24
Печать  
данная ошибка происходит при строке подключения
Код
Выбрать все
СтрокаСоединения="Provider=vfpoledb.1;Data Source="+КаталогБух+";Collating Sequence=RUSSIAN"; 


при строке подключения
Код
Выбрать все
СтрокаСоединения="Driver={Microsoft Visual FoxPro =NO;DELETED=NO;BACKGROUNDFETCH=NO"; 

ошибки не происходит, но тогда "синтаксис ерор"  Злой
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Подскажите с подзапросом в DBF
Ответ #10 - 31. Октября 2006 :: 09:31
Печать  
Проверил, "Класс не зарегистрирован" выдается, если неправильно написать провайдера, например. Может, у тебя драйвер OLE DB для FoxPro не стоит?...
  
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите с подзапросом в DBF
Ответ #11 - 31. Октября 2006 :: 09:37
Печать  
Uzhast писал(а) 31. Октября 2006 :: 09:31:
Проверил, "Класс не зарегистрирован" выдается, если неправильно написать провайдера, например. Может, у тебя драйвер OLE DB для FoxPro не стоит?...

а как это проверить? я ставил дравей VFPro 9-й с микрософта скачанный...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите с подзапросом в DBF
Ответ #12 - 31. Октября 2006 :: 09:42
Печать  
прошу великодушно меня простить, я ставил драйвер для ODBC...  Смущённый
ща качну для OLE DB...
просто вроде когда был универсальный, я его потерял, и недавно качнул только для ODBC
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите с подзапросом в DBF
Ответ #13 - 31. Октября 2006 :: 09:43
Печать  
Код
Выбрать все
	OLEDB = СоздатьОбъект("OLEDBData");
	OLEDB.Connect("Provider=VFPOLEDB.1;Deleted=Yes;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN=""");
	Command = OLEDB.CreateCommand();
	ТЗПроверка = СоздатьОбъект("ТаблицаЗначений");
	ТЗПроверка = Command.ExecuteStatement("SELECT * FROM 1SJOURN");
	ТЗПроверка.ВыбратьСтроку();
	Command.Close();
	OLEDB.Close();
 

  
Наверх
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите с подзапросом в DBF
Ответ #14 - 31. Октября 2006 :: 09:44
Печать  
Вась, и к чему ты это написал?
  

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