На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Обязательно указание:
1) типа базы данных (Paradox/Oracle/Interbase и т.п.)
2) способа доступа к базе данных (ODBC/ADO/DAO/BDE и т.п.)
Например: Paradox/BDE, MS Access/ADO

Наиболее часто задаваемые вопросы:
Базы даных для начинающих. Первые шаги. Понятие о BDE.
Переход на клиент-сервер и начала ADO
Приёмы работы с BLOB (OLE/Memo) полями
Запросы и параметры или как избавиться от многих проблем. Проблемы с датами в запросах.
Нужели мне нужно устанавливать BDE? (или почему не работает программа на другом компьютере)
Модераторы: Bas, Rouse_
Страницы: (4) 1 [2] 3 4  все  ( Перейти к последнему сообщению )  
> dbExpress; запрос SELECT и вывод результата в переменную....
    Ты DRKB почитай сначала (там на русском) и я думаю половина вопросов отпадёт
      хорошо... :)
        ExpandedWrap disabled
          unit Unit1;
           
          interface
           
          uses
            Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
            Dialogs, DBXpress, FMTBcd, DB, SqlExpr, StdCtrls;
           
          type
            TForm1 = class(TForm)
              Button1: TButton;
              Zapros: TButton;
              Memo1: TMemo;
              SQLConnection: TSQLConnection;
              SQLQuery: TSQLQuery;
              Edit1: TEdit;
              procedure Button1Click(Sender: TObject);
              procedure FormCreate(Sender: TObject);
              procedure Connect(Sender: TObject);
              procedure Disconect(Sender: TObject);
           
              procedure ZaprosClick(Sender: TObject);
            private
              { Private declarations }
            public
              { Public declarations }
            end;
           
          var
            Form1: TForm1;
           
          implementation
           
          {$R *.dfm}
           
          procedure TForm1.Button1Click(Sender: TObject);
          begin
          SQLConnection.Connected := true;
           
           
          end;
           
          procedure TForm1.FormCreate(Sender: TObject);
          begin
          memo1.Clear;
          end;
           
          procedure TForm1.Connect(Sender: TObject);
          begin
          memo1.Lines.Add('Подключение успешно');
          end;
           
          procedure TForm1.Disconect(Sender: TObject);
          begin
          memo1.Lines.Add('Соединение разорвано');
          end;
           
          procedure TForm1.ZaprosClick(Sender: TObject);
          begin
          sqlquery.SQL.Clear;
          SQLQuery.SQL.add('SELECT * FROM foto');
          SQLQuery.Active := true;
          sqlquery.open;
          end;
           
          end.

        Мне кажется что я что то не то делаю....
        В DRKB написано:
        Текст запроса содержится в свойстве
        property SQL: TStrings;
        а его простое строковое представление в свойстве
        property Text: string;


        Если запрос возвращает набор данных, его выполнение осуществляется свойством Active или методом open. В противном случае используется метод
        function ExecSQL(ExecDirect: Boolean = False): Integer; override;


        А вот как возвратить не знаю???
        Или я все не так сделал?

        Добавлено
        Я код подркдактировал)))
        Сообщение отредактировано: magsim -
          вот тебе ф-ция которую тебе уже написал ViktorXP
          только немного "подругому" написана

          ExpandedWrap disabled
            function tmainF.GetSQLValue(const ASQL: String): Variant;
            begin
              result := null; // иницыализируем переменную (на тот случай если резуль запроса вернет пустоту)
              try
                SQLQuery.SQL.Text := ASQL; // присваеваем наш sql
                SQLQuery.open; // открываем
                if SQLQuery.RecordCount > 0 then Result := SQLQuery.Fields[0].AsVariant; // если число строк больше единицы значит берем значение первой колонки
              except
                // если в sql ошибка то тут можно выдать меседж.
              end;
            end;
             
             
            GetSQLValue('SELECT id FROM foto'); // вот эта строка возвращает данные
            Я пока вот так сделал
            ExpandedWrap disabled
              procedure TForm1.ZaprosClick(Sender: TObject);
              begin
              sqlquery.SQL.Clear;
              SQLQuery.SQL.Text := 'SELECT * FROM foto WHERE id=3';
              SQLQuery.Active := true;
              memo1.Lines.Add(SQLQuery.Fields[1].AsVariant);
              memo1.Lines.Add(intTostr(SQLQuery.RecordCount));
              end;


            А эта функция вытаскивает первую строку?как я понял...а этим параметром выбираем какой столбец....
            а как выбирать строку если их несколько?
            допустим 5 ?
              почитай о SQLQuery.MoveBy и SQLQuery.RecNo
                Что по ним вообще нечего найти не смог :(
                не в инете не в справке....для чего они?

                Добавлено
                SQLQuery.MoveBy это какоето перемещение по курсору...а с какими параметрами надо?
                  Цитата magsim @
                  SQLQuery.MoveBy это какоето перемещение по курсору...а с какими параметрами надо?

                  А почему у меня есть ??
                  Цитата
                  Description
                  Moves to another record relative to the active record in the dataset.

                  Call MoveBy to move the active record by the number of records specified by Distance. A positive value for Distance indicates forward progress through the dataset, while a negative value indicates backward progress. For example, the following statement moves backward through the dataset by 10 records:

                  MoveBy(-10);
                  DataSet1.MoveBy(-10);

                  MoveBy posts any changes to the active record and

                  Sets the Bof and Eof properties to false.

                  If Distance is positive, repeatedly fetches Distance subsequent records (if possible), and makes the last record fetched active. If an attempt is made to move past the end of the file, MoveBy sets Eof to true.

                  If Distance is negative, repeatedly fetches the appropriate number of previous records (if possible), and makes the last record fetched active. If an attempt is made to move past the start of the file, MoveBy sets Bof to true. If the dataset is unidirectional, the dataset raises an DB.EDatabaseError exception when MoveBy tries to fetch a prior record.

                  Broadcasts information about the record change so that data-aware controls and linked datasets can update.

                  Returns the number of records moved. In most cases, Result is the absolute value of Distance, but if MoveBy encounters the beginning-of-file or end-of-file before moving Distance records, Result will be less than the absolute value of Distance.

                  MoveBy lets you specify how many rows forward or back to move the cursor in a dataset. Movement is relative to the current record at the time that MoveBy is called. MoveBy also sets the BOF and EOF properties for the dataset as appropriate.

                  This function takes an integer parameter, the number of records to move. Positive integers indicate a forward move and negative integers indicate a backward move.

                  Note:MoveBy raises an exception in unidirectional datasets if you use a negative argument.
                  MoveBy returns the number of rows it moves. If you attempt to move past the beginning or end of the dataset, the number of rows returned by MoveBy differs from the number of rows you requested to move. This is because MoveBy stops when it reaches the first or last record in the dataset.

                  The following code moves two records backward in CustTable:

                  CustTable.MoveBy(-2);
                  CustTable->MoveBy(-2);
                  Note:If your application uses MoveBy in a multi-user database environment, keep in mind that datasets are fluid. A record that was five records back a moment ago may now be four, six, or even an unknown number of records back if several users are simultaneously accessing the database and changing its data.
                    Ага вот что у меня получилось...
                    я так раньше и делал только с минусом....

                    ExpandedWrap disabled
                      procedure TForm1.ZaprosClick(Sender: TObject);
                      begin
                      sqlquery.SQL.Clear;
                      SQLQuery.SQL.Text := 'SELECT * FROM foto WHERE id = 10';
                      SQLQuery.Active := true;
                      SQLQuery.MoveBy(+1);
                      memo1.Lines.Add(SQLQuery.Fields[1].AsVariant);
                      memo1.Lines.Add(intTostr(SQLQuery.RecordCount));
                       
                      end;


                    А какой функцией можно получить название все полученных столбцов???
                    сколько всетаки проблем с компонентами по Delphi много(((( вот функции в PHP это подробнее расписаны....
                    Но будем учится delphi))))
                      Цитата magsim @
                      сколько всетаки проблем с компонентами по Delphi много(((( вот функции в PHP это подробнее расписаны....

                      Всё расписано. Искать нужно и книги читать.
                      Цитата magsim @
                      А какой функцией можно получить название все полученных столбцов???

                      наверное так вот
                      ExpandedWrap disabled
                        var
                         i : Integer;
                        begin
                          for i := 0 to SQLQuery1.FieldCount - 1 do
                            Memo1.Lines.Add('Field ' + IntToStr(i) + ' :' + SQLQuery1.Fields[i].Name);
                        Ну вы думаете все есть это в книжках??
                        Вот например в какой книжки написано это (SQLQuery1.Fields[i].Name) ????

                        Добавлено
                        Ну или вот какой запрос в поисковике надо было сделать?
                          Цитата magsim @
                          Ну вы думаете все есть это в книжках??

                          ну возможно в книжке и нет (хотя скорее всего есть) но в справке и всяких статьях точно есть.
                          Или ты думаешь я это из пальца высмоктал.
                            я думаю вы из личного опыта...

                            Добавлено
                            Ну просто в справке же не спросишь по русски... - как получить имя столбцов...
                              Цитата
                              Объекты класса TField являются свойством объекта TDataSet (напомним, что некоторые свойства объектов сами являются объектами с их собственными наборами свойств, и TField - один из них).

                              Свойство Fields объекта типа TDataSet позволяет обращаться к отдельным полям набора данных. Свойство Fields является массивом или набором объектов TField, динамически создающимся во время выполнения приложения. Элементы массива соответствуют колонкам таблицы.

                              Объект TField не делает никаких предположений относительно типов данных, с которыми он связан. Он имеет несколько свойств, позволяющих установить или вернуть обратно значения поля, например, AsString, AsBoolean, AsFloat, AsInteger. Наиболее часто используются свойства Text (cтрока текста, выводимого в связанный с данным полем интерфейсный элемент) и FieldName (имя поля базы данных).

                              Или скажешь я это только что сам сочинил.
                              Сообщение отредактировано: VahaC -
                                ну вы же это искали в справке по запросы Field или как то так а потом перевели ...
                                ну это уже не к теме...
                                будем учиться...
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (4) 1 [2] 3 4  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0803 ]   [ 16 queries used ]   [ Generated: 2.05.24, 02:17 GMT ]