Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

Почему возникает ошибка при редактировании таблицы через BDE ?   Найти похожие ветки 

 
GreySerg   (2005-06-09 11:12) [0]

Есть таблица в БД MS SQL :

if exists (select * from dbo.sysobjects where id = object_id(N"[dbo].[document]") and OBJECTPROPERTY(id, N"IsUserTable") = 1)
drop table [dbo].[document]
GO

CREATE TABLE [dbo].[document] (
[id] [int] NOT NULL ,
[name] [varchar] (8000) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[document] WITH NOCHECK ADD
CONSTRAINT [PK_document] PRIMARY KEY  CLUSTERED
(
 [id]
)  ON [PRIMARY]
GO



заполняю ее данными :

INSERT INTO document
                     (id, name)
SELECT     1, replicate("a", 255)
UNION ALL
SELECT     2, replicate("b", 255)
UNION ALL
SELECT     3, replicate("c", 256)


есть такой код доступа к таблице через BDE:


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  SetDBParams(DataBase1,"mydb.cfg");
  with Table1 do
  begin
    Exclusive := False;
    IndexFieldNames := "id";
    TableName := "document";

    Open;
    while not Eof do
    begin
      Edit;
      FieldByName("Name").Value := "34";
      Next;
    end;
  end;
end;



почему возникает возникает ошибка "Couldn"t perform the edit because another user changed the record" , при редактировании записи (когда делаю Edit), у которой количество символов в name > 255 (в данной случае на записи с id =3) ?

Можно ли это как-то исправить ?

P.S. : переход на ADO не предлагать, т.к. слишком много кода надо переделать


 
Ega23 ©   (2005-06-09 11:22) [1]

Попробуй


    while not Eof do
   begin
     Edit;
     FieldByName("Name").AsString := "34";
     Post;
     Next;
   end;


 
GreySerg   (2005-06-09 11:27) [2]

та же ошибка на Edit


 
Anatoly Podgoretsky ©   (2005-06-09 11:46) [3]

БДЕ не поддерживает строковые поля свыше 255 символов.


 
GreySerg   (2005-06-09 13:00) [4]

получается нет выхода , если использовать BDE

попробовал через BDE Tquery сделать :

  with Table1 do
  begin
    Exclusive := False;
    IndexFieldNames := "id";
    TableName := "document";

    Open;
    while not Eof do
    begin
      Query1.SQL.Clear;
      Query1.SQL.Add("Update document SET ");
      for i := 0 to FieldCount-1 do
      begin
       if (i <> 1) and (Fields[i].FieldName <> "id") then Query1.SQL.Add(",");
       if Fields[i].FieldName <> "id" then
         Query1.SQL.Add(Fields[i].FieldName + " = :" + Fields[i].FieldName);
      end;
      Query1.SQL.Add("where id =" + FieldByName("id").AsString);
      Query1.ParamByName("name").AsString := "34";

      Query1.ExecSQL;
      Next;
    end;
  end;



вроде работает , но если слегка изменить код

      s := "";
      for i:= 1 to 256 do
        S:= s + "b";
      Query1.ParamByName("name").AsString := S;



ошибок не выдает, но вставляет белиберду ,если Length(S)> 255


 
Ega23 ©   (2005-06-09 13:21) [5]

ошибок не выдает, но вставляет белиберду ,если Length(S)> 255

Потому, что это уже BLOB.


 
sniknik ©   (2005-06-09 15:06) [6]

Query1.SQL.Add("Update document SET");
 Query1.SQL.Add("Name = :Name1 + :Name2");

 s := "";
 for i:= 1 to 250 do
   S:= s + "b";
   
 Query1.ParamByName("name1").AsString := S;
 Query1.ParamByName("name2").AsString := S;

сквозь BDE проскочет, а серверу пофигу он поддерживает он сложит.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.041 c
3-1118233992
Kirill_21
2005-06-08 16:33
2005.07.18
Добавление данных в DB


9-1112794393
Кирилл
2005-04-06 17:33
2005.07.18
Effects


1-1120296879
A№t0№
2005-07-02 13:34
2005.07.18
Использование try


8-1111400251
man1
2005-03-21 13:17
2005.07.18
где можно найти исходники граф. редактора


1-1119695069
TW
2005-06-25 14:24
2005.07.18
Работа с TObjectList





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский