![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите решить проблемму 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