powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Пишу проект базы данных, система и передача данных
25 сообщений из 58, страница 1 из 3
Пишу проект базы данных, система и передача данных
    #39496744
Sandist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Сейчас передо мной стоит задача написания проекта, который будет выполнять определенный функционал по взаимодействию с различными СУБД, получения и передачи информации по сети. Я хочу поэтапно описывать конкретные задачи и мою реализацию. Возможно кому-нибудь будет полезно, или кто-нибудь подправит и подкорректирует, тем самым улучшит реализацию. Всем спасибо заранее
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496749
Sandist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. я реализовываю проект на RadStudio 10.1 Berlin
Программа должна уметь подключаться к большому количеству различных СУБД, причем корректировать настройки СУБД не предоставляется возможным. Затем программа должна уметь выполнять SQL скрипт на СУБД. А результаты выполнения скрипта передать по интернету (в виде файла для начала). Я решил реализовать данную задачу с помощью встроенных компонентов FireDAC
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496750
Sandist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Соединение с СУБД (будет изменяться)
Код: pascal
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.
Procedure TForm1.ConnectToServer(fConnectString: String; fAutoReconnect:Boolean;
                                 fIsolation:TFDTxIsolation; 
                                 var fResult:String; var fisConnect:boolean);
var
  i:Byte;
begin
  i := 0;
  if FDConnection1.Connected then
    FDConnection1.Connected := False;
  FDConnection1.TxOptions.Isolation := fIsolation;
  FDConnection1.ResourceOptions.AutoReconnect := fAutoReconnect;   
  FDConnection1.Params.Text := fConnectString;
  while (not FDConnection1.Connected) and (i < 2) do 
  //2 попытки на соединение (в случае c FireBird столкнулся с тем, что если с первого раза не соединился, есть шанс 
  //соединиться со второй попытки через непродолжительное время, в моем случае я взял секунду
  //связано с ошибкой - Connection rejected by remote interface)
  try
    if i > 0 then sleep(1000);
    FDConnection1.Connected := true;
  except
    on E:Exception do
    begin
      inc(i);
      fResult := 'ConnectToServer-' + E.Message;
    end;
  end;
  fisConnect := FDConnection1.Connected;
end;
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496751
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в бложик
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496752
Sandist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2. Выполнение SQL запроса
Код: pascal
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.
procedure TForm1.ExecSQL(fFDConnection: TFDConnection; fSQLText: String;
                         fisOpen:boolean; fFileName,fDelim:String; fBlockSize:Integer; 
                         fisStandartExport:Boolean;
                         var fError: String);
//fSQLText - текст запроса
//fisOpen - True(Запрос Select), False (Запрос DML)
//fFileName - Файл куда сохраняется результат (путь и имя файла, например: d:\1.txt)
  //fDelim - разделитель между значениями полей;
  //fBlockSize - Сколько записей надо накопить перед сбросом в файл
  //fisStandartExport - Выгрузить стандартной выгрузкой FDQuery (на всякий случай)
var
  qrTemp: TFDQuery;
begin
  qrTemp := TFDQuery.Create(Self);
  with qrTemp do
  try
    try
      Connection := fFDConnection;
      SQL.Text := fSQLText;
      DisableControls;
      fFDConnection.TxOptions.ReadOnly := fisOpen;
      if fisOpen then
      begin
        FetchOptions.CursorKind := ckForwardOnly;
        Open;
        if (fFileName <> '') then
          if fisStandartExport then
            SaveToFile(fFileName,sfBinary)//Стандартная выгрузка
          else
          begin
            fError := SaveQueryToFile(fFileName,qrTemp,fDelim,fBlockSize);
            if fError <> '' then
              exit; //Переход на Finally
          end;
        Close;
      end
      else
        ExecSQL;
    except
      on E:Exception do
        fError := 'ExecSQL-'+E.Message;
    end;
  finally
    try FreeAndNil(qrTemp); except end;
  end;
end;



Пример использования
Код: pascal
1.
ExecSQL(FDConnection1,Memo2.Text,True,'d:\MyTxt.txt','~',10000,False,fErrorMessage);
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496756
Sandist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Я думаю это больше в форуме, потому что я его только реализовываю и интересно мнение людей, после полной реализации можно собрать в блог и залить
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496760
Sandist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3. Выгрузка результата Query в текстовый файл
Код: pascal
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.
Function TForm1.SaveQueryToFile(fFileName: String; fFDQuery: TFDQuery;
                                fDelim:String; fBlockSize:Integer):String;
//fDelim - разделитель между значениями полей;
//fBlockSize - Сколько записей надо накопить перед сбросом в файл
var
  i,fBlock,fFieldCount: Integer;
  OutLine,sTemp: string;
  F:TextFile;
begin
  memo3.Clear;
  //fFDQuery.FetchOptions.CursorKind := ckForwardOnly; И fFDQuery.DisableControls; выполняются до
  //FreeAndNil(fFDQuery); происходит после выполнения процедуры
  fFDQuery.First;
  memo3.Lines.Add('StreamOutline begin - '+datetimetostr(now));
  SaveQueryToFile := '';
  AssignFile(F,fFileName);
  fBlock := 0;
  try
    Rewrite(f);
  except
    on E:Exception do
    begin
      SaveQueryToFile := 'RewriteFile-'+E.Message;
      FreeAndNil(F);
      exit;
    end;
  end;
  try
    try
      fFieldCount := fFDQuery.FieldCount;
      while not fFDQuery.Eof do
      begin
          for i := 0 to fFieldCount - 1 do
          begin
            sTemp := fFDQuery.Fields[i].AsString;
            OutLine := OutLine + sTemp + fDelim;
          end;
          setLength(OutLine, Length(OutLine) - 1);
          OutLine := OutLine + sLineBreak;
          if (fBlock >= fBlockSize) then
          begin
            setLength(OutLine, Length(OutLine) - 1);
            try
              Write(F,OutLine);
            except
              on E:Exception do
              begin
                SaveQueryToFile := 'WriteToFile-'+E.Message;
                FreeAndNil(F);
                exit; //переход на filally
              end;
            end;
            OutLine := '';
            fBlock := 0;
          end
          else Inc(fBlock);
          fFDQuery.Next;
      end;
      if (OutLine <> '') then
        Writeln(F,OutLine); //Дописываем блок в котором не набралось нужное количество записей
    except
      on E:Exception do
      begin
        SaveQueryToFile := 'SaveQueryToFile-'+E.Message;
        FreeAndNil(F);
        exit; //переход на filally
      end;
    end;
  finally
    try CloseFile(F); except end;
  end;
  memo3.Lines.Add('StreamOutline End - '+datetimetostr(now));
end;



Пример использования:
Код: pascal
1.
fError := SaveQueryToFile('d:\1.txt',qrTemp,'~',10000);
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496762
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sandistя его только реализовываю и интересно мнение людей

Как я уже сказал: спрячь этот код и никому не показывай. Чтобы не было мучительно стыдно
за бессмысленно нажатые кнопки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496763
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача очень простая, да и ее рализация пока у тебя пока самая примитивная.

Навевает в общем:
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496768
Sandist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,
лучше написать не смог. Почему должно быть стыдно? Я не позиционирую себя как профессионала в программировании, реализовываю по мере своих способностей. Если есть чем подсказать буду рад
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496774
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пойми, что сейчас ты гордишься примитивными вещами класса "Хэлло ворлд".
Sandistлучше написать не смог. Почему должно быть стыдно?

Именно потому, что ты выкладываешь на всеобщее обозрение свой лучший код, но при этом те,
кто постарше и поопытнее, напишут то же самое чисто рефлекторно, только код будет короче и
эффективнее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496779
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи, каждый имеет право быть чайником и ламером,
тем более невоинствующим. Пусть пишет, как может, и
выкладывает свои достижения. Возможно, кто-то захочет
подсказать и направить в правильное русло. Авось, через
месяц качество его кода вырастет на порядок.

А закрыть/удалить всегда успеется, это несложно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496782
Sandist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Так стыдно-то почему должно быть? Да, я не особо опытный и пусть даже не особо смышленый, но ведь для чего нужны форумы? На мой взгляд чтобы делиться информацией с другими. Я поделился, мне ответили, что все очень плохо, что умные дяди напишут лучше и что им не стоит гордиться. А как это должно мне помочь? Ведь если бы я мог, я бы сразу написал очень хороший код. И я не горжусь этим кодом, я написал, чтобы узнать больше и возможно кому-нибудь помочь. И я не считаю, что своим кодом я засирают форум. Я считаю, что засирают форум сообщения, которые пишутся не по теме. Вот как это например.
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496786
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SandistВедь если бы я мог, я бы сразу написал очень хороший код.
это неважно.
В любом случае, какой код ни напиши, он кому-то будет казаться очень плохим
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496790
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandistТак стыдно-то почему должно быть?

Я даже и не знаю... Почему может быть стыдно за тупую копи-пасту чужого кода и выдавание
его за свой?

В своём коде ты должен знать назначение каждой строчки чтобы уметь объяснить зачем она
именно там и почему она именно такая.

А теперь объясни мне зачем в
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1267396&msg=20683155 вызов
DisableControls?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496796
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sandist,

хочешь кому-то помочь, напиши книгу или выложи готовый проект на публичный ресурс. Формат форума предполагает вопрос-ответ и обсуждение. Пока ты будешь писать программу, твой топ разрастется до размеров первого тома "Война и мир". Вряд ли кто-то из пришедших по ссылкам гугла решиться его читать с самого начала.

Кроме того, маловероятно, что окружающие (кроме тебя самого) будут восторгаться публикуемым тобой кодом. Да еще и советами замучают :)
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496797
Sandist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

я извиняюсь, ранее я использовал DataSource и Query передавался в параметре, потом я переписал и создавал Query внутри и уничтожал внутри.
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496804
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док> хочешь кому-то помочь, напиши книгу или
Док> выложи готовый проект на публичный ресурс.

Да какая уж тут книга с такими знаниями.
А готового проекта пока нет, "в процессе".
Так что пусть выкладывает, самые явные
глупости кто-то может и подправить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496805
Sandist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sandist,

видимо я написал реально несуразную хрень, раз все так настойчиво пытаются мне об этом сказать
мне интересно, вот я вбил в гугле "выгрузка query в csv delphi"
первая ссылка https://stackoverflow.com/questions/5680017/delphi-tquery-save-to-csv-file
этот код лучше?
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496813
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sandist> этот код лучше?

Не намного.

P.S. К тебе претензии, потому что топик будет выглядеть
не как "покритикуйте код", а как "как можно/нужно делать".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496818
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sandistя вбил в гугле "выгрузка query в csv delphi"

То есть из стохастического программиста, пишущего код методом тыка ты решил мутировать в
гуглопрограммиста, копипастящего нагугленные куски кода себе в программу. Хрен редьки не
слаще.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496825
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sandist,

пиши давай, никого не слушай.
А то местные старпёры развели тут междусобойчик, нормальным парням пройти нельзя.
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496827
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДSandist,

пиши давай, никого не слушай.
А то местные старпёры развели тут междусобойчик, нормальным парням пройти нельзя.

"Ты пиши,
пиши,
пиши,
Сочиняй весь век,
Потому что пародист —
Тоже человек.

Он не хочет затянуть
Туже поясок.
Для него
твои стихи —
Хлебушка кусок.

Ты пиши
и мой призыв
Не сочти за лесть,
Потому что пародист
Тоже
хочет
есть!"
А. Иванов
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496828
Sandist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Я изначально был гуглопрограммистом, сказал же, что не претендую на роль проф программиста
ладно, я понял, что не стоит продолжать выкладывать свой говнокод
надеюсь никого не испачкал этим кодом ))
...
Рейтинг: 0 / 0
Пишу проект базы данных, система и передача данных
    #39496869
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sandist3. Выгрузка результата Query в текстовый файл


За except end я бы оторвал руки сразу, уж извини.
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 1 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Пишу проект базы данных, система и передача данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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