Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.07.2010, 08:42
b.grigorev b.grigorev вне форума
Прохожий
 
Регистрация: 21.07.2010
Сообщения: 9
Репутация: 10
Восклицание добавления записи в таблицу dbf

Помогите написать запрос для добавления записи в таблицу dbf.
Есть таблицы bdf, нужно вносить в них изменения.
Таблицы я научился подключать через ADO и BDE, а вот добавить запись я так и не могу. Я понимаю что надо SQL запросы писать, но не знаю как пишется запрос и куда его надо вводить.
Пожалуйста не пишите что надо мне почитать книги, это мне не поможет, у меня появится больше вопросов чем ответов, я уже пробовал там все расплывчато написано а мне надо конкретно по моему примеру!
Покажите мне конкретный рабочий пример, буду очень признателен!
Ответить с цитированием
  #2  
Старый 21.07.2010, 09:05
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Цитата:
Сообщение от b.grigorev
Помогите написать запрос для добавления записи в таблицу dbf.
Есть таблицы bdf, нужно вносить в них изменения.
Таблицы я научился подключать через ADO и BDE, а вот добавить запись я так и не могу. Я понимаю что надо SQL запросы писать, но не знаю как пишется запрос и куда его надо вводить.
Пожалуйста не пишите что надо мне почитать книги, это мне не поможет, у меня появится больше вопросов чем ответов, я уже пробовал там все расплывчато написано а мне надо конкретно по моему примеру!
Покажите мне конкретный рабочий пример, буду очень признателен!
SQL запрос на Вставку:
Код:
INSERT INTO TableName (FieldName1,FieldName2) 
Values(ValueField1,ValueField2)

На изменение:
Код:
Update TableName Set FieldName1=ValueField1, FieldName2=ValueField2
Where FieldName3= ValueWhere

где:
TableName= Название таблицы
FieldName1,FieldName2,FieldName3= Поля таблицы TableName
ValueField1,ValueField2= Значения вставляемые удаляемые.
ValueWhere= Значение условия выборки

ПС. В книгах по SQL Все нормально расписано, впринципе мне хватало в свое время и стандартной документации. Главное желание.
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
  #3  
Старый 23.07.2010, 13:51
b.grigorev b.grigorev вне форума
Прохожий
 
Регистрация: 21.07.2010
Сообщения: 9
Репутация: 10
Восклицание

Ок, спасибо что ответил!
Что то подобное я уже встречал, но все встает на том что я не знаю куда этот SQL запрос вставить. Напиши пожалуйста куда запрос вводиться, для меня многое станет понятно!
Ответить с цитированием
  #4  
Старый 23.07.2010, 15:38
windaws windaws вне форума
Начинающий
 
Регистрация: 28.08.2009
Сообщения: 116
Репутация: 10
По умолчанию

Цитата:
Сообщение от b.grigorev
Ок, спасибо что ответил!
Что то подобное я уже встречал, но все встает на том что я не знаю куда этот SQL запрос вставить. Напиши пожалуйста куда запрос вводиться, для меня многое станет понятно!
если работаешь в АДО компонент тебе нужен TadoQuery , у него есть свойство SQL, туда вставляешь саму команду , будет выглядить так:
INSERT INTO TableName (FieldName1,FieldName2)
Values(:ValueField1,:ValueField2)
:valuefields1 Будет являться параметром, т.е. ты во время выполнения программы присвоишь определенный текст допустим из эдита, этому параметры и после того как выполнишь запрос данные добавятся в таблицу.
Ответить с цитированием
  #5  
Старый 24.07.2010, 12:03
b.grigorev b.grigorev вне форума
Прохожий
 
Регистрация: 21.07.2010
Сообщения: 9
Репутация: 10
Восклицание

Спасибо вам, есть же люди на форуме!
Кое что для меня проясняется, я не хотел бы здесь тупить и задавать глупых вопросов, я сейчас даже качаю книгу по SQL но пока качается книга и пока пройдет время, до того как я найду что то похожее по моей теме. Я хотел бы задать еще пару вопросов, я думаю что на вас могу положится, т.к. пока получаю для себя ценнейшие ответы.

Вот возьмем dbf файл например industry, он я думаю есть у всех в папке C:\Program Files\Common Files\Borland Shared\Data
там есть название стоблцов ind_code,int_name,long_name, то есть делаем так -
INSERT INTO industry (ind_code,int_name,long_name)
Values(ValueField1,ValueField2)
получается я изменил в запросе название таблицы и название ячеек, получается этого должно хватить чтобы добавить свои данные в таблицу?!
Но что делать дальше при компиляции этого "проекта"? У меня просто запускается таблица и это логично я думаю! Я так понимаю что этот запрос надо связать с кнопкой или как вообще выполнить запрос?
Я понимаю что задаю очень глупый вопрос для вас, но все таки не посылайте меня )) и ответьте на него. Практически не сплю, жду ответа от вас )). Будет классно если вы найдете этот файл у себя, можно конечно и на другом dbf файле показать пример, вы потратите несколько минут а мне серьезно поможете!
Ответить с цитированием
  #6  
Старый 24.07.2010, 13:09
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Плохо, что у вас изначально нет литературы, но по идее и справки встроенной Дельфи должно хататать.
Первое:
В SQL существуют 2 основных вида запросов:
1. исполняемый - запрос который что-то делает с БД и не возвращает данные это запросы типа (insert, delete, update)
2. запрос на получение данных - (select)
Второе:
В Дельфи работа с SQL через ADO реализована следующим образом:
1. Организуется подключение к БД (для фомата DBF базой данных считается каталог в котором расположены таблицы) с помощью компонента AdoConnection.
2. С помощью компонентов ADOQuery или ADOCommand выполняются запросы пользователя.
3. С помощью компонента DataSource результаты выполнения запросов можно передать для отображения в компонет DBGrid или любой другой компонент использующий БД.

Вот пример для вашей таблицы:
Обратите внимание как выглядит строка подключения т.к. для подключение к DBF есть небольшая хитрость.
dfm-файл
Код:
 
object Form1: TForm1
  Left = 307
  Top = 114
  Width = 435
  Height = 300
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object DBGrid1: TDBGrid
    Left = 8
    Top = 48
    Width = 320
    Height = 185
    DataSource = DataSource1
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'MS Sans Serif'
    TitleFont.Style = []
  end
  object ADOConnection1: TADOConnection
    Connected = True
    ConnectionString = 
      'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Co' +
      'mmon Files\Borland Shared\Data\;Extended Properties=DBASE IV;Per' +
      'sist Security Info=False'
    LoginPrompt = False
    Mode = cmShareDenyNone
    Provider = 'Microsoft.Jet.OLEDB.4.0'
    Left = 24
    Top = 16
  end
  object ADOQuery1: TADOQuery
    Active = True
    Connection = ADOConnection1
    CursorType = ctStatic
    Parameters = <>
    SQL.Strings = (
      'select * from industry.dbf')
    Left = 64
    Top = 16
  end
  object DataSource1: TDataSource
    DataSet = ADOQuery1
    Left = 104
    Top = 16
  end
end
и сам файл
Код:
 
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, Grids, DBGrids, ADODB;
type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
end.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 24.07.2010 в 13:20.
Ответить с цитированием
  #7  
Старый 24.07.2010, 13:51
b.grigorev b.grigorev вне форума
Прохожий
 
Регистрация: 21.07.2010
Сообщения: 9
Репутация: 10
По умолчанию

Мои вопросы проигнорированы, я получил дополнительную конечно НУЖНУЮ информацию но НЕ ответы не мои вопросы. Просьба чтобы я вас уже не мучил отправьте мне на email: b.grigorev@mail.ru проект, где используется bdf файл с «функцией» добавления своих данных и не более того. Способ подключения, через ADO, драйвер лично у меня используется foxpro, но можно и другой на ваше усмотрение.

Конечно было еще хорошо, если бы вы мне ответили все таки на мои вопросы, что бы устранить некоторые пробелы. Заранее Спасибо! Извините за занудство!
Ответить с цитированием
  #8  
Старый 24.07.2010, 16:11
windaws windaws вне форума
Начинающий
 
Регистрация: 28.08.2009
Сообщения: 116
Репутация: 10
По умолчанию

Цитата:
Сообщение от b.grigorev
Мои вопросы проигнорированы, я получил дополнительную конечно НУЖНУЮ информацию но НЕ ответы не мои вопросы. Просьба чтобы я вас уже не мучил отправьте мне на email: b.grigorev@mail.ru проект, где используется bdf файл с «функцией» добавления своих данных и не более того. Способ подключения, через ADO, драйвер лично у меня используется foxpro, но можно и другой на ваше усмотрение.

Конечно было еще хорошо, если бы вы мне ответили все таки на мои вопросы, что бы устранить некоторые пробелы. Заранее Спасибо! Извините за занудство!
По порядку:
1) Создаешь проект делфи
2) Кидаешь на форму компоненты ADOConnection1, ADOTable1, DataSource1, AdoQuery1, DBGRID1, Button1, и 3 эдита для ввода данных.
3)Связываешься с БД, в компоненте ADoTable1 указываешь название таблицы.
4) В Датасурсе указываешь таблицу
5) На форме после того как разместил DBGrid указываешь DataSource таблицы, она отобразится в гриде.
6)Выделяешь компонент ADOQuery, находишь свойство SQL, нажимаешь и вводить туда это запрос-(для таблицы Industry пример) :
INSERT INTO industry (ind_code,int_name,long_name)
Values(:ind_code,:int_name,:Long_name)
7)Нажимаешь ок, потом в этом же компоненте заходишь в Parameters там появятся параметры int_code,int_name,:long_name.
8)Далее щелкаешь двойным щелчком на компонент кнопки, и туда пишешь код:
Код:
adoquery1.parameters[0].asInteger:=strtoint(edit1.text);
adoquery1.parameters[1].asString:=edit1.text;
adoquery1.parameters[2].asString:=edit1.text;
adoquery1.execute;
Table1.refresh;

Запускаешь вводишь в эдиты данные и жмешь на кнопку.
Ответить с цитированием
  #9  
Старый 24.07.2010, 17:39
b.grigorev b.grigorev вне форума
Прохожий
 
Регистрация: 21.07.2010
Сообщения: 9
Репутация: 10
По умолчанию

Спасибо windaws, на 7 пункте все встало колом не могу разобраться.
после того как я щелкнул на кнопу Parametrs, там появились int_code,int_name,:long_name, ну да там они есть, ну а дальше то что???
Потом я нажал на конку два раза, ввел код, потом запустил проект и у меня сразу вылезли ошибки
[Error] Unit1.pas(36): Undeclared identifier: 'asInteger'
[Error] Unit1.pas(37): Undeclared identifier: 'asSring'
[Error] Unit1.pas(38): Undeclared identifier: 'asString'
[Error] Unit1.pas(39): Undeclared identifier: 'execute'
[Error] Unit1.pas(40): Undeclared identifier: 'Table1'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

Слушай вышли мне проект b.grigorev@mail.ru, так будет проще мне разобраться, а если что я напишу.
Ответить с цитированием
  #10  
Старый 24.07.2010, 20:41
windaws windaws вне форума
Начинающий
 
Регистрация: 28.08.2009
Сообщения: 116
Репутация: 10
По умолчанию

ошибся...
Код:
adoquery1.Parameters.ParamByName('ind_code').Value:=edit1.text;
adoquery1.Parameters.ParamByName('int_name').Value:=edit2.text;
adoquery1.Parameters.ParamByName('Long_name').Value:=edit3.text;
adoquery1.ExecSQL;
adoquery1.refresh; (или сделай неактивной потом снова активной active:=true, active:=false; )
Ответить с цитированием
  #11  
Старый 25.07.2010, 07:58
b.grigorev b.grigorev вне форума
Прохожий
 
Регистрация: 21.07.2010
Сообщения: 9
Репутация: 10
По умолчанию

С эти кодом пошло вроде бы.
Запускаю все нормально, ошибок нет, НО когда я меняю в компоненте ADOQuery active:=false на active:=true, показывается ошибка: Неправильно определен объект Parameter. Предоставлены несовместимые или неполные сведения.
Ответить с цитированием
  #12  
Старый 25.07.2010, 12:16
windaws windaws вне форума
Начинающий
 
Регистрация: 28.08.2009
Сообщения: 116
Репутация: 10
По умолчанию

Цитата:
Сообщение от b.grigorev
С эти кодом пошло вроде бы.
Запускаю все нормально, ошибок нет, НО когда я меняю в компоненте ADOQuery active:=false на active:=true, показывается ошибка: Неправильно определен объект Parameter. Предоставлены несовместимые или неполные сведения.
ненужно менять в компоненте ты в коде вместо
Код:
adoquery1.refresh
напиши
Код:
adoquery1.active:=false;
adoquery1.active:=true;
Ответить с цитированием
  #13  
Старый 25.07.2010, 12:54
b.grigorev b.grigorev вне форума
Прохожий
 
Регистрация: 21.07.2010
Сообщения: 9
Репутация: 10
По умолчанию

ок, поменял, при компиляции выдает ошибку, глянь пожалуйста.
Изображения
Тип файла: jpg Безымянный.JPG (81.7 Кбайт, 15 просмотров)
Ответить с цитированием
  #14  
Старый 25.07.2010, 13:28
windaws windaws вне форума
Начинающий
 
Регистрация: 28.08.2009
Сообщения: 116
Репутация: 10
По умолчанию

Цитата:
Сообщение от b.grigorev
ок, поменял, при компиляции выдает ошибку, глянь пожалуйста.
Название поля неправильно указано нужно указать IND_NAME вместо INT_NAME.
В коде исправь:
Код:
adoquery1.Parameters.ParamByName('IND_name').Value:=edit2.text;

в запросе:
Код:
INSERT INTO industry (ind_code,IND_name,long_name)
Values(:ind_code,:IND_name,:Long_name)
Ответить с цитированием
  #15  
Старый 25.07.2010, 16:58
b.grigorev b.grigorev вне форума
Прохожий
 
Регистрация: 21.07.2010
Сообщения: 9
Репутация: 10
По умолчанию

Спасибо что не оставляешь меня с моими начинаниями. Прошлую ошибку в принципе я мог распознать, признаю что сначала надо самому попробовать разобраться. НО новая ошибка, я не могу разобрать, что то вроде связано с функцией ввода.
Изображения
Тип файла: jpg Новый рисунок.jpg (74.7 Кбайт, 18 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:36.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter