powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перекачка данных посредством ADODB
6 сообщений из 6, страница 1 из 1
Перекачка данных посредством ADODB
    #38550621
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос наверняка простецкий (но я в этом деле полный newbie): есть проблема - два источника данных, один - dBase, второй Oracle. Нужно перелить данные из dBase в Oracle. Таблицы одинаковые (в смысле по структуре и, с оговорками, типам данных). Насколько получилось у меня сейчас: я открываю через ADODB.Connection dBase таблицу и переливаю данные в Recordset. Затем открываю Oracle и заливаю построчечно этот Recordset в таблицу Oracle. А можно обойтись без этого Recordset'а и перелить данные напрямую из одного источника в другой (что-нибудь типа insert into ORACLE_TABLE (column1, column2...) select column1, column2... from DBASE_TABLE)?
Заранее спасибо.
...
Рейтинг: 0 / 0
Перекачка данных посредством ADODB
    #38550634
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут недавно было обсуждение, глянь, может что-то поможет
http://www.sql.ru/forum/1070655/sovmestit-rezultaty-dvuh-adodb-recordset
...
Рейтинг: 0 / 0
Перекачка данных посредством ADODB
    #38550684
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для перекачек данных откуда угодно куда угодно хорошо подходит Data Transformation Wizard от MSSQL 2000. DTW довольно просто выковыривается из MSSQL и прекрасно работает сам по себе.
...
Рейтинг: 0 / 0
Перекачка данных посредством ADODB
    #38551066
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не получается у меня написать прямой перелив:
Код: java
1.
2.
3.
4.
5.
6.
var DBFconn = WScript.CreateObject ("ADODB.Connection");
var ORAconn = WScript.CreateObject ("ADODB.Connection");
ORAconn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=myDBid;User Id=myUser;Password=myPass;";
DBFconn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\dbf_dir;Extended Properties=dBASE IV;";
DBFconn.Open();
ORAconn.Open();


далее в оракле есть список полей, который нужно выбрать из ДБФ:
Код: java
1.
2.
var vCOL_clause=ORAconn.Execute("select COLUMN_CLAUSE from SettingsTable WHERE TABLE_NAME='myTable'");
var DBFrecord_set = DBFconn.Execute("select "+vCOL_clause(0)+" from myTable");


Вот тут все работает. А дальше как ни пробовал что-нибудь в духе:
Код: java
1.
var ORArecord_set = ORAconn.Execute("insert into myTable ("+vCOL_clause(0)+") select "+vCOL_clause(0)+" from [Microsoft.Jet.OLEDB.4.0;Data Source=c:\\dbf_dir;Extended Properties=dBASE IV;].[myTable]");


jscript пуляет всю эту красоту не меняя (имею в виду все что после from) в Оракул и Оракул за это потом полосует меня почем зря.
Ладно, остаюсь на рекордсетах. Но тут возникает другой момент. Дело в том, что таблицы, которые переливать, будут разные и их будет много, не хочется под каждую писать отдельный инсерт. Попробовал унифицировать алгоритм:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var strSQL = "DBFrecord_set(0)";
var i = 1;
while (i<DBFrecord_set.fields.Count)
	{strSQL = strSQL+"+\",\"+DBFrecord_set("+i+")";
	i=i+1;
	}
var strSQL = "insert into myTable ("+vCOL_clause(0)+") values (\"+"+strSQL+"+\")";
while (!DBFrecord_set.eof)
{
var ORArecord_set = ORAconn.Execute(strSQL);
DBFrecord_set.MoveNext;
}


Execute не разбирает вход из strSQL, (хотя если ему полученное выражение прямо подсунуть, отрабатывает без ошибок) а любезно предоставляет эту возможность Оракулу, который за это с превеликим удовольствием обкладывает меня ORA-... c ног до головы.
Если можно подсказать, в какую сторону копать?
...
Рейтинг: 0 / 0
Перекачка данных посредством ADODB
    #38595427
PyroTechnic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем, без разбора строчки dBase и сборки выражения для инсерта не обошлось, но как оказалось, оно и к лучшему, заливаются данные весьма быстро даже при построчечных инсертах, но зато в момент сборки инсерта возникла необходимость всевозможные косяки dBase-a устранить (например 0 в нумеровых полях, пользовательские ляпы и т.п.) которые были успешно устранены.
...
Рейтинг: 0 / 0
Перекачка данных посредством ADODB
    #38598547
nrmBeginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PyroTechnic,

У объекта Recordset есть свойства RSetFrom.Fields.Count и RSetFrom.Fields(...).Name при помощи которых можно писать универсальные алгоритмы для всех таблиц сразу.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перекачка данных посредством ADODB
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]