powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Export
10 сообщений из 10, страница 1 из 1
Export
    #32011933
SAnder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток.

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 - ни слова) то ли байки это все...)
В общем задачка на три дня, а висит уже месяц, документации и тщетных попыток - масса, голова кругом...
(А! - смешно то, что интуиция упорно зудит, что где-то рядом есть простое и красивое решение

Спасибо ежели дочитали до этого места, и еще более, если кто может что знает, да намекнет...
Вуе.
...
Рейтинг: 0 / 0
Export
    #32011936
Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На делфи прога пишется в "три минуты", причём с шифрацией!
...
Рейтинг: 0 / 0
Export
    #32011937
Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К примеру вот функция для сохранения результата запроса в 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;
...
Рейтинг: 0 / 0
Export
    #32012890
Sander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, конечно, но мне бы TSQL...
...
Рейтинг: 0 / 0
Export
    #32012901
dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для линкед сервер - из 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 (я так понимаю пользоваться будут не только администраторы).
...
Рейтинг: 0 / 0
Export
    #32012943
Sander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, 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
(и вылетает из хранимой процедуры)
НО... Запись-то есть!!! (к сожалению только одна)

Искал как отключить сообщение об ошибке - безрезультатно.

А по поводу, как файлик отдать, так мне уж не до того - пускай юзер батник запускает с рабочего стола - все равно на сервере есть расшаренный каталог. от только данных-то нету!
...
Рейтинг: 0 / 0
Export
    #32013078
Sander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЛИИЗ? - Люди!
...
Рейтинг: 0 / 0
Export
    #32013079
Lenkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделать DTS, сохранить его как VB (.bas) module и вызывать себе спокойненько из клиента
...
Рейтинг: 0 / 0
Export
    #32013081
Я экспортирую данные в 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

Таким образом ежедневно экспортируется несколько десятков тысяч записей.
...
Рейтинг: 0 / 0
Export
    #32013083
А можешь для экспорта в dbf использовать готовый генератор отчетов на http://kuznvv.newmail.ru
Там функция экспорта в dbf заложена унутре.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Export
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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