Поиск по блогу

суббота, 5 января 2019 г.

Привет, как дела? :)

Привет всем! С Новым — 2019-ым — годом!

Интересно, дожил ли блог до этого времени, если бы он был на покупном домене? А так — висел себе годы, кушать не просил, красота!

А хозяйка блога (то есть я) тем временем занималась много чем. Это "много что" было связано с программированием, но уже не с парсингом.

Да и сами статьи о программировании уже особо никому не нужны, когда есть stackoverflow, где можно спросить и тут же получить ответ на свой вопрос.

А кому интересна моя скромная персона, то добро пожаловать на мой канал в Telegram — t.me/me_IT_israel, который я создала буквально пару часов назад. Попробую для себя этот формат вещания.

Там не будет мануалов о программировании, но будет о моей жизни, о нашем намечающемся переезде в Израиль на ПМЖ. Ой, самой страшно и волнительно: новая страна, абсолютно новый язык, люди с другим менталитетом; еще и работать придется, а не дома сидеть на фрилансе... Короче, жарко будет во всех смыслах :) В общем, подписывайтесь, я там пока в одиночестве :)

понедельник, 8 июля 2013 г.

Как отобразить данные SQLite в DBGrid

TSQLMonitor поддерживает SQLite, начиная с версии RAD Studio XE3 (использовать его, естественно, вместе с TSQLConnection). У меня Delphi старенькие, поэтому покажу, как старыми дедовскими методами отобразить выборку данных в DBGrid (с помощью обертки DISQLite, о которой я писала тут).

Пример работает как в Delphi 7, так и в Delphi 2010. В других версиях просто не пробовала.

Следуя шаг за шагом инструкции, приведенной ниже, вы добьетесь желаемого результата — отобразите данные из запроса к БД SQLite в стандартной таблице DBGrid.

1. Разместите на форме:
- DBGrid
- ClientDataSet
- DataSetProvider
- DataSource
Если используете визуальные компоненты, то: DISQLite3Database и DISQLite3UniDirQuery. Если визуальными компонентами от DISQLite не пользуетесь, то экземпляры этих классов создадите динамически.

2. У DISQLite3UniDirQuery в поле Database := DISQLite3Database. И заполните SelectSQL.

3. У DataSetProvider: DataSet := DISQLite3UniDirQuery.

4. У ClientDataSet: ProviderName := DataSetProvider.

5. У DataSource: DataSet := ClientDataSet.

6. У DBGrid: DataSource := DataSource. Соответственно, заполните Columns, которые бы хотели видеть отображенными в таблице.

Вот и все.

Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

четверг, 21 февраля 2013 г.

TChromium: заполнение и сабмит формы

Опишу самый простой способ заполнения и отправки формы с использованием компонента TChromium. С доступом к DOM-элементам по id в нем дела обстоят не так хорошо, как в Webbrowser-е, но зато очень просто исполнять любые java-скрипты.

JavaScript может пригодится не только для заполнения форм, он вообще достаточно широко используется.

Исполнение скрипта осуществляется с помощью ExecuteJavaScript. При этом обязательно проверять, чтобы Chromium.Browser и Chromium.Browser.Mainframe были отличны от nil.

Вот как будет выглядеть заполнение и сабмит формы логина на сайте vk.com.

procedure TfrmMain.btnLoginClick(Sender: TObject);
var
  CodeStr : string;
begin
  if Assigned(Chromium.Browser) and Assigned(Chromium.Browser.Mainframe) then
    begin
      CodeStr := 'document.forms[0].quick_email.value="UserEmail";';
      Chromium.Browser.MainFrame.ExecuteJavaScript(CodeStr, 'about:blank', 0);
      CodeStr := 'document.forms[0].quick_pass.value="UserPass";';
      Chromium.Browser.MainFrame.ExecuteJavaScript(CodeStr, 'about:blank', 0);
      CodeStr := 'document.forms[0].submit();';
      Chromium.Browser.MainFrame.ExecuteJavaScript(CodeStr, 'about:blank', 0);
    end;
end;

На практике столкнулась с необъяснимой ситуацией: если этот код попробовать запустить в Delphi 7, то Chromium.Browser.Mainframe почему-то будет равен nil (а если проверку убрать, то вываливается ошибка доступа). На каком-то форуме нашла, что это общая проблема для Семерки. В 2010 все работает отлично.

Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

Поделиться