• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Нужна помощь!

  • Автор темы markus
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

markus

Помогите пожалуйста! я не программист, а сейчас возникла срочная необходимость написания небольшой программы, сам немножко пытаюсь ковыряться в delphi7, поэтому не судите строго, а по возможности помогите.
пытаюсь создать базу данных без использования сторонних баз данных. все работает. при запуске программы, база данных автоматически вставляется в DBGrid. а мне надо что бы программа открывалась пустой, а я нажимал кнопку открыть и выбирал файл с базой данных.
исходник во вложении...
 

Вложения

  • _________.rar
    13,1 КБ · Просмотры: 169
D

dragon1979

Изначально устанавливаем ClientDataSet1.Active:=False;
Обработка события кнопки "Открыть":

procedure TForm1.Button4Click(Sender: TObject);
begin
if OpenDialog1.Execute then
DataModule2.ClientDataSet1.LoadFromFile(OpenDialog1.FileName);
ClientDataSet1.Active:=True;
end;

И все! Нажимаем открыть,указываем файл 444.cds и готово.
Если нужно открыть другой файл *.cds , то перед if OpenDialog1.Execute then нужно вставить ClientDataSet1.Active:=False во избежание конфликтов между базами (т.е. закрываем одну и открываем другую)

Удачи!
 
M

markus

Огромнейшее спасибо!!!!
Если Вы не против, еще один вопросик: база открывается из файла, как
прописать кнопку "Сохранить"(именно "сохранить", а не "Сохранить
как..." так как с этим разобрался), что бы программа автоматически
сохраняла именно в этот файл, который сейчас открыт, Ведь открыт файл
может с любым названием.
 
D

dragon1979

Например, можно так:
определяем переменную path типа String после var Form1: TForm1:
var
Form1: TForm1;
path:String;//путь к файлу
. . .
procedure TForm1.Button4Click(Sender: TObject);// кнопка "Открыть"
begin
DataModule2.ClientDataSet1.Active:=False;
if OpenDialog1.Execute then
DataModule2.ClientDataSet1.LoadFromFile(Opendialog1.FileName);
DataModule2.ClientDataSet1.Active:=True;
path:=Opendialog1.FileName;// путь к файлу(к базе) который открыли
end;

procedure TForm1.Button8Click(Sender: TObject);// кнопка "Сохранить базу"
begin
DataModule2.ClientDataSet1.SaveToFile(path);
end;
 
M

markus

Спасибо огромное!!!
Все работает! :)

А вот вопрос, на который мне на так толком и не ответили:

ClientDataSet где-то прописывает в себе всю информацию (к терминологии не придирайтесь пожалуйста), при загрузке информации из стороннего файла (который был создан к примеру ранее, то есть этих файлов может быть много) программа как положено отображает все DBGrid, но если выйти из программы и заново ее запустить, все что только что было загружено из файла, опять DBGrig отображается, следовательно ClientDataSet это все куда-то в себя прописал.
Так вот, как сделать, что бы либо при загрузке программы, либо при выходе из нее из ClientDataSet все удалялось (конечно лучше если при выходе из программы). Использование ClientDataSet.CreateDataSet (видимо я не понял куда толком его вставлять) почему-то не получается, при компиляции ошибок не выдается, а при запуске программы выскакивает ошибка подключения к ClientDataSet ...

С меня пиво!
 
D

dragon1979

Из вопроса, если его перевести на русский язык следует, что создали базу, редактировали его, добавляли записи и т.д., а привыходе из программы база удалялась. Но если я правильно понял необходимо, чтобы при запуске программы не запускалась ни одна база. для этого достаточно написать

procedure TForm1.FormCreate(Sender: TObject);
begin
ClientDataset1.Active:=False;
end;

Если я что-то не так понял пиши-разберемся
 
M

markus

в том то и суть что база должна работать, а не быть отключенной при запуске программы, просто что бы при запуске очищались все поля в DBGrid (были только колонки).
как пример: запускается программа, визуально видно таблицу с колонками, можно жать кнопку "добавить" и внести информацию в таблицу, далее если все устраивает , то можно нажать кнопку "сохранить как..." и уже сохранить базу в отдельный файл. Сейчас так все и работает, но если выйти из программы и заново ее запустить, то таблица не будет пустой, а в ней будет заполнена та строчка, которую я только что добавил. То есть кроме сохранения в файл, информация о добавленной строчке сохранилась в ClientDataSet , вот меня и интересует, желательно что бы при выходе из программы все строчки из памяти ClientDataSet удалялись.
 
M

markus

Объясни дурню, я вот сечас делаю, делаю. у меня на компе все запускается, все работает, а беру копирую всю папку с исходниками и экзешником на другой комп, ни чего не замускается и выскакивает ошибка , ругается на файл midas.dll . Извини за мою темноту, но просто даже спросить не у кого, ни одного программиста нет. если я тебе не надоел, то напиши мне на мыло : shotlandec2@mail.ru
 
B

Barmutik

При дистрибуции приложений написанных с использованием технологии multi-tier необходима поставка требуемых DLL в комплекте.. в частности MIDAS.dll..

В хелпе есть отдельный топик посвящённый этому вопросу....
 
L

LAW

Если тебе нужен грид с пустыми колонками при не подключенной к нему базе, нужно через среду до компиляции или программно во время выполнения набрать эти колонки в него. Тогда он будет стоять пустой, но с сеткой.
Через среду, просто 2 раза на него кликаешь, добавляешь полей и делаешь описание. Если понадобится код, напиши выкопаю (где-то в исходниках было).
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!