Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.05.2010, 23:53
MAcK MAcK вне форума
Прохожий
 
Регистрация: 24.07.2008
Сообщения: 39
Репутация: 10
Плохо create MSSQL table from ClientDataset

Как создать таблицу с такой же структурой как в ClientDataSet?
PS: Работал с данными, которые хранятся в файлах, теперь нужно перенести в MSSQL.
Ответить с цитированием
  #2  
Старый 01.06.2010, 08:57
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Самый простой и понятный вариант открываем Enterprise Menager (в комплекте с MSSQL идет) выбираем базу правую кнопку создать таблицу, и пишем структуру ручками.
Ответить с цитированием
  #3  
Старый 01.06.2010, 09:15
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну это не наш метод.
Я вижу еще два варианта:
1. Если у вас данные на диске хранятся как XML-файл, то возможен импорт средствами самого MSSQL.
2. Если данные хранятся в ином виде, то можно написать конвертер.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 01.06.2010, 11:49
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Вот держите, наваял конвертер. Должно вроде работать:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
function FormatSQL(S: String): String;
begin
 Result := StringReplace(S, #13#10,'',[rfReplaceAll]);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
Var
  i,j: Integer;
  Q: TAdoQuery;
  DS: TClientDataset;
begin
 Q := TAdoQuery.Create(nil);
 Q.Connection := AdoConnection1;
 //Создание таблиц
 for i := 0 to ComponentCount - 1
 do if Components[i].ClassType = TClientDataset
    then begin
         DS := TClientDataset(Components[i]);
         Q.SQL.Text := FormatSQL(Format('create table %s (',[Copy(DS.FileName,1,Length(DS.FileName)-4)]));
         for j := 0 to DS.FieldCount - 1
         do begin
            Q.SQL.Text := FormatSQL(Q.SQL.Text + DS.Fields[j].FieldName);
            case DS.Fields[j].DataType
            of ftString: Q.SQL.Text := Format('%s varchar(%d)',[Q.SQL.Text,DS.Fields[j].Size]);
               ftAutoInc: Q.SQL.Text := Format('%s int primary key',[Q.SQL.Text]);
               ftInteger: Q.SQL.Text := Format('%s int',[Q.SQL.Text]);
               ftBoolean: Q.SQL.Text := Format('%s bit',[Q.SQL.Text]);
               ftFloat, ftCurrency: Q.SQL.Text := Format('%s float',[Q.SQL.Text]);
               ftDate: Q.SQL.Text := Format('%s datetime',[Q.SQL.Text]);
               end;
            if j < DS.FieldCount - 1
            then Q.SQL.Text := FormatSQL(Q.SQL.Text + ',');
            end;
         Q.SQL.Text := FormatSQL(Q.SQL.Text + ');');
         Memo1.Lines.Add(Q.SQL.Text);
         Q.ExecSQL;
         end;
 // Заполнение данными
 for i := 0 to ComponentCount - 1
 do if Components[i].ClassType = TClientDataset
    then begin
         DS := TClientDataset(Components[i]);
         while not DS.Eof
         do begin
            Q.SQL.Text := FormatSQL(Format('insert into %s (',[Copy(DS.FileName,1,Length(DS.FileName)-4)]));
            for j := 0 to DS.FieldCount - 1
            do begin
               Q.SQL.Text := FormatSQL(Q.SQL.Text + DS.Fields[j].FieldName);
               if j < DS.FieldCount - 1
               then Q.SQL.Text := FormatSQL(Q.SQL.Text + ',');
               end;
            Q.SQL.Text := FormatSQL(Q.SQL.Text + ') values(');
 
            for j := 0 to DS.FieldCount - 1
            do begin
               if DS.Fields[j].IsNull
               then Q.SQL.Text := FormatSQL(Q.SQL.Text + 'null')
               else begin
                    if DS.Fields[j].DataType in [ftString,ftDate]
                    then Q.SQL.Text := FormatSQL(Q.SQL.Text + ''''+DS.Fields[j].AsString+'''')
                    else Q.SQL.Text := FormatSQL(Q.SQL.Text + DS.Fields[j].AsString);
                    end;
               if j < DS.FieldCount - 1
               then Q.SQL.Text := FormatSQL(Q.SQL.Text + ',');
               end;
            Q.SQL.Text := FormatSQL(Q.SQL.Text + ')');
            Q.ExecSQL;
            Memo1.Lines.Add(Q.SQL.Text);
            DS.Next;
            end;
         end;
 
 Q.Free;
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 01.06.2010 в 16:18.
Ответить с цитированием
  #5  
Старый 01.06.2010, 19:44
MAcK MAcK вне форума
Прохожий
 
Регистрация: 24.07.2008
Сообщения: 39
Репутация: 10
По умолчанию

Спасибо, буду смотреть.
Ручками не получиться там много таблиц будет.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:26.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025