Member
Статус: Не в сети Регистрация: 09.12.2005 Откуда: Москва
Помогите пожалуйста.
Создаю программу которой подключена база данных Access (через BDE Administrator) являющаяся библиотекой. В таблице 4е столбца, один скрыт, его содержание отображается справа от таблицы в поле DBMemo, в этом же поле его можно редактировать.
Так же есть поле для редактирования 2го столбца (названия) - TBEdit.
Цель:
-Создать кнопку (на картинке buttom3) при нажатии на которую будет открываться окошко и нужно будет ввести Автора, название и год выпуска (3и строчки) и нажать ОК. Информации должна записать в таблицу.
-Создать поле, в котом можно ввести несколько букв и он искал по совпадению в полях Автор и название.
Так выглядит программа:
http://ipicture.ru/uploads/080620/I7orW8kKNq.jpg
Очень прошу помочь! Зарание спасибо.
_________________ CPU: Core i7 4770k (3.5Ghz@4.3Ghz, vCore 1.2)+Archon SB-E X2 Mobo: ASUS Z87 Pro (1205) Mem: 2x Corsair 1866Mhz Video: MSI N660Ti PE 2GD5@1070/7000
Member
Статус: Не в сети Регистрация: 20.09.2005 Откуда: Москва
Ребят подскажите пожалуйста, как организовать такую штуку, есть база данных на сервере( InterBаse/FireBird), нужно чтобы когда на одном компе клиенте ввели данные они появились и на других компах клиентах, может есть какоето свойство или компонент незнаю...работает пока только если обновить соединение нажатием на какую нибудь кнопку и тд, нельзя ли это сделать както автоматически?
Спасибо.
Junior
Статус: Не в сети Регистрация: 24.06.2007 Откуда: Москва
подскажите, плз, как в Delphi узнать длину слова? и еще вопрос, данные храняться в базе Access, нужно отсортировать по алфавиту какой-либо столбец, как сделать?
спасибо!
ggKk 1) Воспользоваться функцией Length, которая возвращает длину строки.
2) Воспользоваться компонентом ADOQuery, и написать в нем запрос к твоей таблице с использованием ORDER BY.
Все эти вопросы находятся поиском по форуму или гуглу за пару минут, если их не знать.
Junior
Статус: Не в сети Регистрация: 24.06.2007 Откуда: Москва
sashar2 писал(а):
ggKk 1) Воспользоваться функцией Length, которая возвращает длину строки. 2) Воспользоваться компонентом ADOQuery, и написать в нем запрос к твоей таблице с использованием ORDER BY. Все эти вопросы находятся поиском по форуму или гуглу за пару минут, если их не знать.
смпасибо за оперативность! искать было некогда просто, а тут, знаю, всегда помогут :wink:
Junior
Статус: Не в сети Регистрация: 24.06.2007 Откуда: Москва
всем привет! перед тем как писать вопрос поискала по инету. но что -то ответа нет( точнее у меня не работает так, как пишут.
у меня есть таблица в Access, необходимо удалить все ее содержимое всей. пытаюсь через ADOQuery.SQL.strings[0] := delete from имя_таблицы_которую нужно очистить.
далее ADOQuery.Active := ture;
при запуске выдает ошибку: ADOQuery: CommandText does not return a result set.
почему такая ошибка? и как еще можно очистить таблицу?
Вместо Active:=True следует указать ExecSQL. Для команд вставки, удаления и обновления следует использовать именно ExecSQL, а Active:=True (Open) используется в случае извлечения данных, т.е. команды select.
Вопрос может быть и ламерский, но все же нужно сделать. Суть в следующем: пользователь в текстовой строке вводит какое-то количество параметров для будущего запроса в базу. Параметры разной длинны, количество их неизвестно, вводятся без пробелов через запятые. Нужно узнать сколько этих парметров, ну и отловить сами эти парметры.
Function WordCount(Const S: String; Const WordDelims: TCharSet): Integer; Register; Var SLen, I: Cardinal; Begin Result := 0; I := 1; SLen := Length(S); While I <= SLen Do Begin While (I <= SLen) And (S[I] In WordDelims) Do Inc(I); If I <= SLen Then Inc(Result); While (I <= SLen) And Not(S[I] In WordDelims) Do Inc(I); End; End;
Function WordPosition(Const N: Integer; Const S: String; Const WordDelims: TCharSet): Integer; Register; Var Count, I: Integer; Begin Count := 0; I := 1; Result := 0; While (I <= Length(S)) And (Count <> N) Do Begin While (I <= Length(S)) And (S[I] In WordDelims) Do Inc(I); If I <= Length(S) Then Inc(Count); If Count <> N Then While (I <= Length(S)) And Not (S[I] In WordDelims) Do Inc(I) Else Result := I; End; End;
Function ExtractWord(N: Integer; Const S: String; Const WordDelims: TCharSet): String; Register; Var I: Integer; Len: Integer; Begin Len := 0; I := WordPosition(N, S, WordDelims); If I <> 0 Then While (I <= Length(S)) And Not(S[I] In WordDelims) Do Begin Inc(Len); SetLength(Result, Len); Result[Len] := S[I]; Inc(I); End; SetLength(Result, Len); End;
Function ExtractWordPos(N: Integer; Const S: String; Const WordDelims: TCharSet; Var Pos: Integer): String; Register; Var I, Len: Integer; Begin Len := 0; I := WordPosition(N, S, WordDelims); Pos := I; If I <> 0 Then While (I <= Length(S)) And Not(S[I] In WordDelims) Do Begin Inc(Len); SetLength(Result, Len); Result[Len] := S[I]; Inc(I); End; SetLength(Result, Len); End;
Function ExtractDelimited(N: Integer; Const S: String; Const Delims: TCharSet): String; Register; Var CurWord: Integer; I, Len, SLen: Integer; Begin CurWord := 0; I := 1; Len := 0; SLen := Length(S); SetLength(Result, 0); While (I <= SLen) And (CurWord <> N) Do Begin If S[I] In Delims Then Inc(CurWord) Else If CurWord = N - 1 Then Begin Inc(Len); SetLength(Result, Len); Result[Len] := S[I]; End; Inc(I); End; End;
Function ExtractSubstr(Const S: String; Var Pos: Integer; Const Delims: TCharSet): String; Register; Var I: Integer; Begin I := Pos; While (I <= Length(S)) And Not (S[I] In Delims) Do Inc(I); Result := Copy(S, Pos, I - Pos); If (I <= Length(S)) And (S[I] In Delims) Then Inc(I); Pos := I; End;
Пример:
Код:
Var I: Integer; Temp: String; Begin For I := 1 To WordCount(MyStr, [',']) Do Begin Temp := ExtractWord(I, MyStr, [',']); bla bla bla с Temp End; End;
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Member
Статус: Не в сети Регистрация: 15.08.2004 Откуда: Красноярск
Шмендальф, самое простое – добавить таймер и закодировать событие на таймере:
Цитата:
работает пока только если обновить соединение нажатием на какую нибудь кнопку и тд
Максим, я думаю, человеку надо попроще что-нибудь выдать. Вроде копирования строк между запятыми, используя posex и copy. Например:
Код:
program Proga;
{$APPTYPE CONSOLE}
uses SysUtils, StrUtils, Classes;
function GetParamzz(s:string;var ss:TStringList):cardinal; var i,j,k,n:cardinal; begin k:=0; j:=0; n:=length(s); repeat i:=posex(',',s,j+1); if i=0 then i:=n+1; ss.Add(copy(s,j+1,i-j-1)); j:=i; inc(k); until j>n; result:=k; end;
var a:string; b:TStringList; c:cardinal;
begin b:=TStringList.Create; readln(a); writeln('Found '+inttostr(GetParamzz(a,b))+' parameters:'); for c:=0 to b.Count-1 do writeln(b.Strings[c]); b.Free; end.
Пока это написал, изматерил TurboDelphi как мог.. И еще дважды VPU Recover срабатывал.. К чему бы это?
Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
ckotick В тех функциях и так используется по полной Pos и Copy.
А так, можно побыстрее код найти.
Код:
function Q_CountOfWords(const S: string; const Delimiters: TCharSet): Integer; asm PUSH EBX TEST EAX,EAX JE @@q0 MOV ECX,[EAX-4] MOV EBX,EAX DEC ECX JS @@qz PUSH ESI XOR EAX,EAX JMP @@lp2 @@iw: INC EAX DEC ECX JS @@ex @@lp1: MOVZX ESI,BYTE PTR [EBX+ECX] BT [EDX],ESI JC @@nx DEC ECX JNS @@lp1 @@ex: POP ESI POP EBX RET @@lp2: MOVZX ESI,BYTE PTR [EBX+ECX] BT [EDX],ESI JNC @@iw @@nx: DEC ECX JNS @@lp2 POP ESI POP EBX RET @@qz: XOR EAX,EAX @@q0: POP EBX end;
function Q_GetWordN(OrdN: Integer; const S: string; const Delimiters: TCharSet): string; var I,J,N: Integer; L: LongWord; P: PChar; A: Boolean; begin L := Length(S); P := Pointer(S); A := False; N := 1; for I := 1 to L do begin if not (P^ in Delimiters) then begin if not A then begin if N = OrdN then begin N := L+1; Inc(P); for J := I+1 to L do begin if P^ in Delimiters then begin N := J; Break; end; Inc(P); end; Result := Copy(S,I,N-I); Exit; end; A := True; Inc(N); end; end else A := False; Inc(P); end; Result := ''; end;
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Вообще-то подобную задачу можно решить гораздо легче, написав всего лишь несколько строчек кода.
Допустим, S - текстовая строка, в которой ведётся поиск параметров. Параметры разделяются запятыми.
StrList: TStringList - список строк, в который будут заноситься параметры.
После чего ListBox будет заполнен параметрами. Для извлечения необходимого параметра можно обращаться к StrList по индексу.
StrList.Count - это число параметров.
Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
ZALMAN0371
Код:
Function IntToBin(Value: Longint; Digits, Spaces: Integer): String; Register; Begin Result := EmptyStr; If Digits > 32 Then Digits := 32; While Digits > 0 Do Begin If (Digits Mod Spaces) = 0 Then Result := Result + ' '; Dec(Digits); Result := Result + IntToStr((Value Shr Digits) And 1); End; End;
Хотя можно без spaces сделать и тогда строчку
Код:
If (Digits Mod Spaces) = 0 Then Result := Result + ' ';
выкинуть
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения