Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите решить проблемму table read only [D7, MSSQL]


slaviq ©   (2004-09-20 14:42:00) 

кьери ругается что таблица в режиме только чтения но запись добавляет, вопщем настройки:
Database(DATABASE NAME=art_item
USER NAME=admin
OPEN MODE=READ/WRITE
PASSWORD=asdasdas
)алиас настроен через ОДБС в винде и прекрасно работает (с ним точно проблемм нет)
у кьери стоит реквестлив=тру
кьери запрос заполняется немного рагульно - но в СКЛ Менеджере работает:
  Close;
  SQL.Clear;
  SQL.Add('INSERT INTO art');
  SQL.Add('(ID, Name, Artik, Groupe, Col, Sc, color, mat, line)');
  SQL.Add('SELECT MAX(ART.ID) + 1, :Name, :Art, GROUPE.ShortName, :Col , 0,');
  SQL.Add('-1, COLORS.ID, LINES.ID');
  SQL.Add('FROM ART, GROUPE, COLORS, LINES');
  SQL.Add('WHERE GROUPE.LongName = :Groupe AND');
  SQL.Add('    Colors.Color = :Color AND LINES.Name = :Line');
  SQL.Add('GROUP BY Groupe.ShortName, colors.ID, LINES.ID');

  Parambyname('Name').AsString:=Form1.NamB.Text;
  Parambyname('Art').AsString:=Art;
  Parambyname('Groupe').AsString:=Grup;
  Parambyname('Col').AsString:=Form1.ColB.Text;
//   Parambyname('podgrupa').AsString:=Podgr;
  Parambyname('Color').AsString:=Color;
  Parambyname('Line').AsString:=Line;
  ExecSQL;

Через трай делать без ексепта - гониво - а вдруг реальная ашиПка будет - лучше уж ее ловить ....
Кстати еще одна особенность - если у кьери поставить реквест лив тру и открывать в одном датбейсе по порядку несколько таблиц - то первая открывается (ну там например открыл чтото заполнил, закрыл) то если открывать вторую табличку - начинает ругаться про неправильнось составления запросика :(
Помогите плиз. Может стоит чтото поменять в СКЛ запросе - через там процедуры и все такое, только я в этом не силен :(
Буду рад любым пропозициям! Зарание 10х!


slaviq   (2004-09-20 16:01:00) [1]

ууууууу.......
СПАСИБКИ!!!!!!!!! ВАПЩЕ БЛИН СУПЕР!!!! :)


Ega23   (2004-09-20 15:48:00) [2]

Ну, типа того:

if exists (select * from sysobjects where id = object_id(N'[s_ArtEdit]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [s_ArtEdit]
GO

CREATE PROCEDURE s_ArtEdit
@mode int=1, -- 1- Add, 2- Edit, 3-Delete
@ArtID int=0,
@Name varchar(...),
@Art ...
@Grope
@Col
@Color
@Line

As
declare
@result int


Set Nocount On

if @mode=1
begin
 Select @result= MAX(IsNull(ART.ID,0)) + 1
 Insert into .....

end

if @mode=2
begin
 Updete Arts set ....   where ArtID=@ArtID

end

if @mode=3
begin
 Delete Arts where @ArtID=@ArtID
end

return(@result)

go


Вызов на добавление с клиента:


Declare @X int Set NoCount On
exec @X=s_ArtEdit @Mode=1, @Name=:Name, @Art=:Art, @GroupeLongName=:Groupe, ...
Set NoCount OFF
Select X=@X';


Эту строку отписываешь в Query1.Sql.Text, потом


try
Query1.Open;
Result:=Query1.FieldByName('X').AsInteger;


Вот в таком вот ключе.
Дерзай!


slaviq   (2004-09-20 15:36:00) [3]

кстати, а результат как передать????
процедуркой щас займусь .... 10Х!


Ega23   (2004-09-20 15:13:00) [4]

Вообще-то я бы сделал через ХП:

exec sp_ArtInsert @Nam=:Name, @Art=:Art, @GroupeLongName=:Groupe, ...

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

Да, кстати, более правильно будет SELECT MAX(IsNull(ART.ID,0)) + 1


Наверх

Титульная страница Поиск, карта сайта Написать письмо