Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема OLE DB из базы dbf к SQL-базе, делал кто? (число прочтений - 2521 )
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
OLE DB из базы dbf к SQL-базе, делал кто?
24. Мая 2007 :: 10:39
Печать  
Что имеем:
2 базы, 1 - dbf, 2 - SQL, MD оlинаковые,
надо из dbf получать типизированные данные из SQL базы.
Может кто уже делал, дайте плиз пример, чтобы велосипед не изобретать.
Заранее спасибо.
  
Наверх
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: OLE DB из базы dbf к SQL-базе, делал кто?
Ответ #1 - 24. Мая 2007 :: 11:40
Печать  
из dbf получать типизированные данные другой SQL базы?
  
Наверх
ICQ  
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: OLE DB из базы dbf к SQL-базе, делал кто?
Ответ #2 - 24. Мая 2007 :: 11:46
Печать  
spock писал(а) 24. Мая 2007 :: 11:40:
из dbf получать типизированные данные другой SQL базы?

Да, ведь MD одинаковые (dbf - это переферия).
  
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: OLE DB из базы dbf к SQL-базе, делал кто?
Ответ #3 - 24. Мая 2007 :: 13:41
Печать  
Все нормально работает, правде ще типизацию не проверил, вот пример:
Код
Выбрать все
Перем КаталогВнБазы;
Перем глOleDB, глOleCmd;
// ======================================
Function XOR(Val ParA, Val ParB)
	Res = 0;
	Koef = 1;
	For BitNumber = 1 To 8 Do
		BitA = ParA % 2;
		BitB = ParB % 2;
		ParA = Int(ParA / 2);
		ParB = Int(ParB / 2);
		BitC = (BitA + BitB) % 2;
		Res = Res + BitC * Koef;
		Koef = Koef * 2;
	EndDo;
	Return Res;
EndFunction
// ======================================
// индексы значений с списке
// server = 2, db = 4, uid = 6, pwd = 8, checksum = 10
Function ConnectionString()  export
	Перем SQLKeyCode[36], ConnectCode[200];
	КаталогБазы = КаталогВнБазы;
	ConnectFile = КаталогБазы + "1Cv7.DBA";
	If ФС.СуществуетФайл(ConnectFile) = 0 Then
		Message("Это не SQL - база!", "!");
		Return (0);
	EndIF;
	FSO = CreateObject("Scripting.FileSystemObject");
	F = FSO.OpenTextFile(ConnectFile, 1);
	ConnectLen = 0;
	While F.AtEndOfStream = 0 Do
		ConnectLen = ConnectLen + 1;
		ConnectCode[ConnectLen] = Asc(F.Read(1));
	EndDo;
	F.Close();
	FSO = 0;
	SQLKey = "19465912879oiuxc ensdfaiuo3i73798kjl";
	For i = 1 To 36 Do
		SQLKeyCode[i] = Asc(Сред(SQLKey, i, 1));
	EndDo;
	Connect = "";
	For i = 1 To ConnectLen Do
		Connect = Connect + Chr(XOR(ConnectCode[i], SQLKeyCode[(i - 1) % 36 + 1]));
	EndDo;
	vl=createobject("ValueList");
	Connect=StrReplace(Connect,"{","");
	Connect=StrReplace(Connect,"}","");
	vl.fromSeparatedString(Connect);
	return (vl);
EndFunction
// ======================================
Функция ПолучитьДопПарам(Парам)
	СпрПарам = СоздатьОбъект("Справочник.n_ДопПараметры");
	СпрПарам.ПорядокНаименований();
	Если СпрПарам.НайтиПоНаименованию(Парам) = 0 Тогда
		Сообщить("Не найден в справочнике ""+Доп. параметры+"" параметр "+Парам);
		Возврат(0);
	КонецЕсли;
	Возврат(СокрЛП(СпрПарам.Парам));
КонецФункции
// ======================================
Функция гл_Connect(флОтладка=0)
	КаталогВнБазы = ПолучитьДопПарам("КаталогЦБ");
	Если КаталогВнБазы = 0 Тогда
		КаталогВнБазы = КаталогИБ();
	КонецЕсли;
	Если ФС.СуществуетФайл(КаталогВнБазы+"1cv7.dds")=1 Тогда
		constr=ConnectionString();
		Если ConStr<>0 Тогда
			server   = constr.getValue(2);
			database = constr.getValue(4);
			uid		 = constr.getValue(6);
			pwd		 = constr.getValue(8);
			Попытка
				глOleDB = СоздатьОбъект("OLEDBData");
			Исключение
				Сообщить("Не загружена ВК 1С++");
				Возврат(0);
			КонецПопытки;
			Попытка
				глOleDB.Connect("provider=SQLOLEDB;data "+""+СокрЛП(pwd));
			Исключение
				Сообщить("Нет доступа к базе "+СокрЛП(database));
				Сообщить(ОписаниеОшибки());
				Возврат(0);
			КонецПопытки;
			глOleCmd = глOleDB.CreateCommand();
			глMDW = СоздатьОбъект("MetaDataWork");
			Если флОтладка = 1 Тогда
				глOleCmd.Debug(1);
			КонецЕсли;

			Возврат(1);

		КонецЕсли;
	КонецЕсли;
	Возврат(0);
КонецФункции
// ======================================
Функция гл_Disconnect()
	глOleCmd.Close();
	глOleDB.Close();
	Возврат 1;
КонецФункции

// ======================================
Процедура Сформировать()
	Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"1CPP.DLL") = 0 Тогда
		Сообщить("Не загружена компонента 1С++");
		Возврат;
	КонецЕсли;
	Если гл_Connect() = 0 Тогда
		Возврат;
	КонецЕсли;
	ТЗ = СоздатьОбъект("ТаблицаЗначений");
	ТЗ = глOleCmd.ExecuteStatement("SELECT @@VERSION AS VER");
	ТЗ.ВыбратьСтроку();
	гл_Disconnect();
КонецПроцедуры
 

  
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: OLE DB из базы dbf к SQL-базе, делал кто?
Ответ #4 - 24. Мая 2007 :: 21:31
Печать  
По идее должно прокатить... хотя смотря что вытворяли с МД
Я пользовался реквизитом IDD (МОД), базы были разные
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать