Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нужна помощь по лабе Sql!
Форумы BIG Telecom > О технике, программировании и другом > Developer's
TapakaH
Задали лабу по SQL. Почему-то не проходит запрос, выделенный жирным. Он должен выводить из таблицы все строки, где в параметре "Адрес_ВВ" есть либо D, либо F.
Цитата
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, DB, DBTables, Grids, DBGrids, StdCtrls;

type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Label1: TLabel;
Query1: TQuery;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
with Query1 do
begin
SQL.Clear;
SQL.Add('SELECT B1.Подсистема,B1.Слот,B1.Линия_прерывания,B2.Адрес_ВВ,B2.Используемая_память FROM B1,B2 WHERE (B1.Подсистема="Видео") AND (B2.Подсистема="Видео")');
open;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
with Query1 do
begin
SQL.Clear;
SQL.Add('SELECT * FROM B2 WHERE (B2.Адрес_ВВ Like "%D%") AND (B2.Адрес_ВВ Like "F%")');
open;
end;
end;


end.

Подскажите пожалуйста, что я делаю не так.
Suzeren
Ну, я не виджу (на первый взгляд) где ты делаешь таблицу НЕ активной перед выполнением запроса. То что ты добавил в SQL команду ещё ничего не значит...

А так - синтаксис верный, если конечно не напутал с связями. smile.gif
Gray
Какая СУБД, откуда данные качаешь? Если старый Access - вовсе забудь про оператор Like dry.gif он просто не работает. Т.е. известно, КАК он должен работать по стандартам ANSI, но работает он только из среды, а из внешних запросов это микрошитовское Г условия с like обрабатываются некорректно (никогда ничего не возвращают). Причем это относится даже к запросам, построенным в MSQuery - тоже продукте микрошита!!! tongue.gif

В более новых версиях это, говорят, подправили... пробуй:
SQL.Add('SELECT * FROM B2 WHERE (B2.Адрес_ВВ Like ''%D%'') AND (B2.Адрес_ВВ Like ''F%'')');
Если ты не понял, то это два апострофа рядом, а не кавычки.

Сюзерен: ты про проверку на то, не открыта ли таблица уже? На эту ошибку он потом нарвется, и проверку сделает (или не сделает wink.gif ) - сейчас бы ему хотя бы в первый раз таблицу открыть!
Suzeren
Цитата(Gray @ 16.07.2006, 00:45) *
Сюзерен: ты про проверку на то, не открыта ли таблица уже? На эту ошибку он потом нарвется, и проверку сделает (или не сделает wink.gif ) - сейчас бы ему хотя бы в первый раз таблицу открыть!


Так вопрос по работе программы или по работе запроса? Не понял что-то... blink.gif

Я запрос отрабатываю в SQL Query Analyser-е, и запихиваю его в Query заранее работоспособным...

Проверить запрос очевидно можно просто сделав Query активным прям в Delphi даже не компилируя проэкт. Если там ошибку выдаёт, то напиши какую именно. smile.gif
Gray
По работе запроса, конечно! Если под "активным" ты понимаешь флажок active, то ты будешь смеяться - метод open именно этот флаг и ставит! biggrin.gif
Suzeren
Цитата(Gray @ 16.07.2006, 00:52) *
По работе запроса, конечно! Если под "активным" ты понимаешь флажок active, то ты будешь смеяться - метод open именно этот флаг и ставит! biggrin.gif


Это (ты будешь смеяться laugh.gif ) мне известно! Просто поставив active=true проверить поще не компилируя... Может всё таки у Query не присвоины алиасы? или не верно насроен путь к базе?

К тому же как он собирается всё время делать Open не закрывая таблицу? Там всё вряемя и будут висеть данные от старого запроса.... smile.gif
Gray
Как я уже сказал, ему сейчас не до этих проблем laugh.gif Если он ни единого разу не может базу открыть - то ни о каких старых данных речи быть не может smile.gif

Кстати, в последних дельфях проблемы "старых данных" быть не может - они просто не дадут еще раз открыть уже открытый запрос.

Таракан, а вообще Сюзерен дело говорит. Сделай просто SELECT * FROM B2, если это сработает - будешь хотя бы знать, что с техникой у тебя все в порядке, и будешь с sql'ем корячиться. А вот если и это не сработает - копайся в дровах и настройках коннекта!
Suzeren
Цитата(Gray @ 16.07.2006, 01:09) *
Кстати, в последних дельфях проблемы "старых данных" быть не может - они просто не дадут еще раз открыть уже открытый запрос.


Только сейчас проверил - в 7-ом Delphi можно, как собственно и у меня в 6-ом Builder. smile.gif
Gray
Хммда, да, странно, что-то с чем-то я перепутал... Однако, только что проверил - во всяком случае при повторном открытии старые данные не подклеиваются к новым, а как-то сами чистятся! Так что, глядишь, указанной проблемы у него и вовсе не возникнет smile.gif
TapakaH
Хосподи!
Какие алиасы, какая проверка? Проблема была конкретно в коде. Короче, я сам разобрался.
Серому спасибо за подсказку насчет апострофов. У меня в методичке вместо них кавычки написаны mad.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.