Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2011, 07:06   #1
{Shadowevil}
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 52
По умолчанию Обновление записи

Здравствуйте. Назрела небольшая проблема, может кто-нибудь сталкивался. Есть БД в файле *.dat для вытягивания информаци использую компонент ZEOSDBO-6.6.6-stable, а именно ZConnection для подключения к самой БД, ZQuery для вытягивания информации и TDataSource для отображения ее в DBGrid'e, цель заключается в том, что там где стоит "0" в поле "id" во втором DBGrid'e мне надо расставить числа (изобр.1), но при редактировании хотя бы одной строки меняются все поля у которых было значение "0" (изобр.2) помогите пожалуйста реализовать изменение только редактированной строки, пробовал много способов и ничего не выходит

Цитата:
Код:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, Grids, DBGrids,
  StdCtrls, DBTables, ZAbstractRODataset, ZDataset, ZConnection, sButton,
  sDialogs, ExtCtrls, acDBGrid, DBGridEh, DBCtrls, ZAbstractDataset,
  ZAbstractTable;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    sOpenDialog1: TsOpenDialog;
    sButton1: TsButton;
    sButton2: TsButton;
    sOpenDialog2: TsOpenDialog;
    sButton3: TsButton;
    DBGridEh1: TDBGridEh;
    DBGridEh2: TDBGridEh;
    ZTable1: TZTable;
    procedure Button2Click(Sender: TObject);
    procedure sButton1Click(Sender: TObject);
    procedure sButton2Click(Sender: TObject);
    procedure sButton3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure DBGridEh2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Query2BeforePost(DataSet: TDataSet);
    procedure DBGridEh2DblClick(Sender: TObject);

  private
    { Private declarations }
  public
    HomePath:string;
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

uses DM;

{$R *.dfm}



procedure TForm1.Button2Click(Sender: TObject);
begin
if DBGridEh1.EditorMode or DBGridEh1.DataSource.DataSet.Modified then
  DBGridEh1.DataSource.DataSet.Post else
if DBGridEh2.EditorMode or DBGridEh2.DataSource.DataSet.Modified then
  DBGridEh2.DataSource.DataSet.Post else
Form1.Close;
end;

procedure TForm1.sButton1Click(Sender: TObject);
begin
sOpenDialog1.Execute;
end;

procedure TForm1.sButton2Click(Sender: TObject);
begin
sOpenDialog2.Execute;
end;

procedure TForm1.sButton3Click(Sender: TObject);
begin
  if sOpenDialog1.FileName<>'' then
  if sOpenDialog2.FileName<>'' then
  begin
  ComboBox1.Items.Clear;
  ComboBox1.Text:='';
  DataModule1.ZConnection1.Database:=sOpenDialog1.FileName;
  DataModule1.ZConnection1.Connected:=true;
    DataModule1.Query1.Close;
    DataModule1.Query1.SQL.Clear;
    DataModule1.Query1.SQL.Add('SELECT * FROM city');
    DataModule1.Query1.Open;
     While Not DataModule1.Query1.Eof do
    begin
      ComboBox1.Items.Add(DataModule1.Query1.FieldByName('name').AsString);
      DataModule1.Query1.Next;
    end;
    DataModule1.Query1.Close;
  end;
  //else MessageDlg('Выберите обе базы', mtWarning, [mbOK], 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if sOpenDialog1.FileName<>'' then
  if sOpenDialog2.FileName<>'' then
  begin
    DBGridEh1.DataSource:=DataModule1.DataSource1;
    DataModule1.Query3.Close;
    DataModule1.Query3.SQL.Clear;
    DataModule1.Query3.SQL.Add('SELECT * FROM city WHERE name=:name');
    DataModule1.Query3.ParamByName('name').Value:=ComboBox1.Text;
    DataModule1.Query3.Open;

    DataModule1.Query1.Close;
    DataModule1.Query1.SQL.Clear;
    DataModule1.Query1.SQL.Add('SELECT * FROM street_name WHERE cid=:cid');
    DataModule1.Query1.ParamByName('cid').Value:=DataModule1.Query3.FieldByName('cid').AsInteger;
    DataModule1.Query1.Open;

    DataModule1.ZConnection2.Database:=sOpenDialog2.FileName;
    DataModule1.ZConnection2.Connected:=true;
    DataModule1.Query2.Close;
    DataModule1.Query2.SQL.Clear;
    DataModule1.Query2.SQL.Add('SELECT * FROM street WHERE cid=:cid');
    DataModule1.Query2.ParamByName('cid').Value:=DataModule1.Query3.FieldByName('cid').AsInteger;
    DataModule1.Query2.Open;


  end;
end;


код подгрузки данных из БД, а как дальше делать?
Изображения
Тип файла: jpg 1.JPG (75.7 Кб, 125 просмотров)
Тип файла: jpg 2.JPG (77.5 Кб, 122 просмотров)
{Shadowevil} вне форума Ответить с цитированием
Старый 05.12.2011, 09:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
там где стоит "0" в поле "id" во втором DBGrid'e мне надо расставить числа
Какие числа? Уникальные номера? Это поле первичного ключа?
Цитата:
но при редактировании хотя бы одной строки меняются все поля у которых было значение "0"
Ну скорее всего ты (или компонент) делает редактирование не конкретной записи а всех где есть ноль. Запроса на редактирование в твоем коде я не вижу, но предполагаю что тебе нужно либо не запросами делать это либо что лучше всего сменить структуру таблицы. Или если id призван однозначно характеризовать запись, заранее позаботится о его уникальности.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.12.2011, 10:01   #3
{Shadowevil}
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну скорее всего ты (или компонент) делает редактирование не конкретной записи а всех где есть ноль. Запроса на редактирование в твоем коде я не вижу, но предполагаю что тебе нужно либо не запросами делать это либо что лучше всего сменить структуру таблицы. Или если id призван однозначно характеризовать запись, заранее позаботится о его уникальности.
воо, помогло, спасибо большущее! действительно проблема была в уникальности поля поэтому, видимо, и было обновление всех записей вместо одной
{Shadowevil} вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оцените математической формулой, насколько больше цифр в двоичной записи большого числа, чем в его десятичной записи. Анюта.Хом Помощь студентам 1 02.12.2011 23:13
Обновление > beegl Мультимедиа в Delphi 1 19.04.2011 02:01
Обновление поля со счетчиком при добавлении записи через форму в клиент-серверной БД byte916 Microsoft Office Access 7 08.06.2010 02:17
Обновление 313131 Помощь студентам 0 05.03.2010 18:52
Обновление ПО [Smarik] Общие вопросы Delphi 3 02.02.2009 09:00