|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
чтение БД из MSSQL Server и сохранения в DBF (Foxpro)
Весь ваш форум перерыл и не мог найти не чего толкового по этому вопросу так что создаю новую тему.
Уважаемые форумчане у меня возникла проблема при сохранения бд в формате dbf (FoхPro). Начну с начало у меня на работе есть сервер MS SQL на нем лежит БД. Я через делфи создаю форму подключаюсь к SQL серверу нормально, вытаскиваю таблицу с данными которые мне нужны и делаю фильтр. Как мне эту таблицу уже отфильтрованную сохранить БД в dbf (FoxPro) формат? Уже голову слома как это можно сделать программно не как не догоняю, может что посоветуете или в какую сторону копать, а если может у кого есть схожие исходники буду благодарен. |
#2
|
||||
|
||||
Это гораздо проще сделать средствами самого сервера. Смотри в сторону DTS
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
||||
|
||||
Если задача принципиально через Delphi это сделать, то я вижу два решения:
A) 1. Подключить таблицу из MSSQL 2. Подключить таблицу из FoxPro 3. По таблице MSSQL сделать обход добавляя записи в таблицу FoxPro B) 1. Воспользоваться мастером запросов в TQuery. (компоненты BDE) Там есть возможность работать одновременно с двумя разными источниками данных. Но я бы просто воспользовался мощным инструментом DTS (Data transformation service) который уже имеется на MSSQL Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
|||
|
|||
Если с DTS не разберешься, то программно тоже можно. как вариант, самый деревянный,ADOQuery В котором запрос с фильтром к MSSQL, table (BDE) ссылающаяся на dbf файл. далее по циклу выставляешь из ADOQUERY в Table.
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#5
|
|||
|
|||
Цитата:
Да я все это понимаю но я в тупеке, уже сделал подключение к серверу, перенос структуры а вот саму таблицу(данные) не могу перенести, неможете пример кода привести как это делаеться? Я тыпался сделать одним способом вот он Код:
While not ADODataSet1.EOF do begin for i := 0 to ADODataSet1.Fields.Count-1 do table1.FieldByName(ADODataSet1.Fields[i].FieldName).Assign(ADODataSet1.Fields[i]); //вот тут ругаеться ADODataSet1.Next; end; |
#6
|
||||
|
||||
Потому что так не правильно. Метод Assing вообще не для этого предназначен.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#7
|
|||
|
|||
Цитата:
|
#8
|
|||
|
|||
Цитата:
|
#9
|
|||
|
|||
Код:
if adoquery1.isEmpty=false then begin ADOQUERY1.first; repeat table1.append; table1.field['field1'].value:=Adoquery1.fieldbyname('fieldADO1').value; table1.field['field2'].value:=Adoquery1.fieldbyname('fieldADO2').value; table1.post; adoquery1.next; until adoquery1.eof; end; Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#10
|
||||
|
||||
Интересно, это только мне глаз режет такой код:
Код:
if adoquery1.isEmpty=false then Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 22.12.2010 в 20:24. |
#11
|
|||
|
|||
Цитата:
Я вписывал имя таблици. Я недосмотрел, надо было включить таблицу. И заменить field на fieldbyname везде. Table1.Active:=True; While not ADOQuery1.EOF do begin table1.append; table1.FieldByName('ID').value:=Adoquery1.fieldbyN ame('ID').value; table1.post; adoquery1.next; end; Благадарю за помошь. Последний раз редактировалось Irehon, 23.12.2010 в 06:05. |
#12
|
|||
|
|||
2 Страдалецъ
Цитата:
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#13
|
||||
|
||||
Режет глаз не проверка, а то как вы это делаете.
1) adoquery1.isEmpty - функция возвращающая логическое значение. 2) оператор if работает с логическим условием Так-что выполнение этих двух пунктов достаточно и незачем еще раз сравнивать adoquery1.isEmpty=false Итогом моих умствований будет такой код: Код:
if not adoquery1.isEmpty then Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#14
|
|||
|
|||
Цитата:
ну можно и так для меня в целом не принципиально. могу и так писать. например на старом месте работы нач. бесили такие выражения какое указали вы, типа не понятно, с аргументом функция isEmpty возвращает False True вот и сравнивай их, читать легче. тут главное ведь было не стилистика кода, а просто подсказать куда "копать". Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |