Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Export
|
|||
|---|---|---|---|
|
#18+
Доброе время суток. MS SQL srv 7.0, Задача: по кнопке с клиента сервер делает выборки, и их результаты юзер должен получить в виде трех dbf файлов (да еще бы в zip архиве) на дискетке. Помогите, кто чем может - сами мы не местные - с access недавно переехали :,( (возвращаться, да еще плюс odbc - жуть!) DTS - что-то ужасное, пакет состряпать можно только непосредственно на сервере, трансформ дата таск пропети открывается минуты три! (ноги устали, а чего? - 600 таблиц!) Поставил себе на раб место (NT wrkst) клиентские утилиты от 2000 - коннекшны есть, а тасков - нет! (типа data driven query task или run sql) Хотя уже заранее чувствую, что для такой задачи DTS это монстр. Слыхивал, что можно дэ-бэ-эфки как linked servers оформить - дохлый номер! (то ли нету нужного provider_name (а какое нужно? и где взять? - в book online - ни слова) то ли байки это все...) В общем задачка на три дня, а висит уже месяц, документации и тщетных попыток - масса, голова кругом... (А! - смешно то, что интуиция упорно зудит, что где-то рядом есть простое и красивое решение Спасибо ежели дочитали до этого места, и еще более, если кто может что знает, да намекнет... Вуе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 12:10 |
|
||
|
Export
|
|||
|---|---|---|---|
|
#18+
На делфи прога пишется в "три минуты", причём с шифрацией! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 12:23 |
|
||
|
Export
|
|||
|---|---|---|---|
|
#18+
К примеру вот функция для сохранения результата запроса в DBF или DB файл, зиповать можно при помощи вызова PKZIP из командной строки, с шифрацией конэчно сложней! function ToriExportToTable(TableName :String; SourceDS :TDataSet; bHide :Boolean) :Longint; var TargetDS :TTable; ASourceFld, ATargetFld :TField; J, N, I, i1, nBatch :Integer; FActive :Boolean; FldName :String; eFieldType :TFieldType; function TruncToLength(S :String; const NewLength :Word) :String; begin Result := Copy ( S, 1, NewLength ) ; end; begin Result := -1; TargetDS := nil; TargetDS := TTable.Create(nil); if ExtractFileExt(TableName) = 'dbf' then TargetDS.TableType := ttDbase else begin if ExtractFileExt(TableName) = 'db' then TargetDS.TableType := ttParadox ; end ; TargetDS.TableName := TableName; if FileExists(TableName) then begin TargetDS.Close; TargetDS.DeleteTable; end; for I := 0 to SourceDS.FieldCount - 1 do begin if bHide and not SourceDS.Fields .Visible then Continue; FldName := TruncToLength(SourceDS.Fields.FieldName, 10) ; N := 0 ; for J := 0 to TargetDS.FieldDefs.Count - 1 do if TargetDS.FieldDefs.Items[J].Name = FldName then begin Inc(N); FldName := Copy(FldName, 1, + FormatFloat('00', N) ; end; // if SourceDS.Fields.DataType = ftAutoInc then // eFieldType := ftInteger // else // eFieldType := SourceDS.Fields.DataType; if SourceDS.Fields.DataType = ftDateTime then eFieldType := ftDate else eFieldType := SourceDS.Fields.DataType ; TargetDS.FieldDefs.Add(FldName, eFieldType, SourceDS.Fields.Size, SourceDS.Fields.Required) ; end; TargetDS.CreateTable; TargetDS.Open; try FActive := SourceDS.Active ; if not FActive then SourceDS.Open ; SourceDS.First ; nBatch := 0 ; Result := 0 ; while Not SourceDS.EOF do begin if nBatch = 32 then begin Application.ProcessMessages ; nBatch := 32 ; end else nBatch := nBatch + 1 ; i1 := 0 ; TargetDS.Insert ; for I := 0 to SourceDS.FieldCount - 1 do begin if bHide and not SourceDS.Fields.Visible then Continue ; ASourceFld := SourceDS.Fields; ATargetFld := TargetDS.Fields[I1]; if ASourceFld.IsNull then ATargetFld.Clear else begin if (ASourceFld is TDateField) or (ASourceFld is TDateTimeField) then ATargetFld.AsDateTime := ASourceFld.AsDateTime else ATargetFld.AsString := ASourceFld.AsString ; end; i1 := i1 + 1 ; end; TargetDS.Post ; SourceDS.Next ; Result := Result + 1 ; end; finally if not FActive then SourceDS.Close; TargetDS.Close; TargetDS.Free; end; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 12:26 |
|
||
|
Export
|
|||
|---|---|---|---|
|
#18+
Спасибо, конечно, но мне бы TSQL... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 08:19 |
|
||
|
Export
|
|||
|---|---|---|---|
|
#18+
Для линкед сервер - из BOL поиск по слову sp_addlinkedserver: EXEC sp_addlinkedserver @server = 'SEATTLE Mktg', @provider = 'Microsoft.Jet.OLEDB.4.0', @srvproduct = 'OLE DB Provider for Jet', @datasrc = 'C:\MSOffice\Access\Samples\Northwind.mdb' Посмотрите еще sp_addlinkedsrvlogin Что значит "юзер должен получить в виде трех dbf файлов"? Они должны выкладываться ему на комп в шару? Тогда у SQL Server долджны быть для этого права (не под Loacal account). Или если не по сети, шлите по почте, но настройте SQL Mail. Зиповать можно через xp_cmdshell, но для этого права должны быть у учетной записи под которой работает сервер и у SQLAgentCmdExec (я так понимаю пользоваться будут не только администраторы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 09:59 |
|
||
|
Export
|
|||
|---|---|---|---|
|
#18+
Спасибо, Dmitry. Создается сервер, почти все хорошо; неделю уже. умеет возвращать записи. - Вставлять не умеет вот такой код: INSERT INTO sev_cont...[SHHGIN] SELECT doc_ctrl_num, LEFT (nat_cur_code,2), supp_code, date_doc FROM #delive_chg а инициализация была такая: EXEC sp_addlinkedserver 'sev_cont', 'Jet 4.0', 'Microsoft.Jet.OLEDB.4.0', 'D:\ВBF\',NULL,'dBASE IV' заменил по Вашему совету на: EXEC sp_addlinkedserver 'sev_cont1', 'OLE DB Provider for Jet', 'Microsoft.Jet.OLEDB.4.0', 'D:\DBF\',NULL,'dBASE IV' (а где хоть эти заклинания-то берутся, для @srvproduct ???) А в итоге, до смешного: на первой записи срывается на ошибке: Server: Msg 7331, Level 16, State 2, Procedure a_item_bar_sp, Line 94 Could not release a row from OLE DB provider 'Microsoft.Jet.OLEDB.4.0'. Unknown provider error (и вылетает из хранимой процедуры) НО... Запись-то есть!!! (к сожалению только одна) Искал как отключить сообщение об ошибке - безрезультатно. А по поводу, как файлик отдать, так мне уж не до того - пускай юзер батник запускает с рабочего стола - все равно на сервере есть расшаренный каталог. от только данных-то нету! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 15:35 |
|
||
|
Export
|
|||
|---|---|---|---|
|
#18+
Сделать DTS, сохранить его как VB (.bas) module и вызывать себе спокойненько из клиента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2001, 06:17 |
|
||
|
Export
|
|||
|---|---|---|---|
|
#18+
Я экспортирую данные в dbf из mssql посредством vbs, поэтому как это будет через t-sql - подсказать не могу. А на vbs все просто: set dbf_con=CreateObject("ADODB.Connection") dbf_con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dir & ";Extended Properties=DBase IV" sql="create table " & dbf_name & " (" & ...... dbf_con.Execute sql while ...... sql="insert into " & dbf_name & " (" & ........ dbf_con.Execute sql wend Таким образом ежедневно экспортируется несколько десятков тысяч записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2001, 06:31 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3550&tid=1825713]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 390ms |

| 0 / 0 |
