Простои вопрос по VB

Tala
Новичок
Posts: 99
Joined: 21 May 2002 03:12
Location: Rostov -> Northbrook,IL

Простои вопрос по VB

Post by Tala »

У меня несложнии вопрос, но как говорится заклинило.
Почему след. код не работает? Всем заранее спасибо.

With adoRS
db.Execute "DELETE from MyTable WHERE format(ID," & Chr(34) & "mm/dd/yyyy HH:MM:SS" & Chr(34) & ")=" & varD
.MoveNext
If .EOF Then .MoveLast
End With

varD - DateTime variable

Я пробовала без форматирования:
db.Execute "DELETE from tcustomerdocuments WHERE ID =" & varD
Но разници никакои,не работает.
User avatar
katit
Уже с Приветом
Posts: 23804
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Re: Простои вопрос по VB

Post by katit »

Tala wrote:У меня несложнии вопрос, но как говорится заклинило.
Почему след. код не работает? Всем заранее спасибо.

With adoRS
db.Execute "DELETE from MyTable WHERE format(ID," & Chr(34) & "mm/dd/yyyy HH:MM:SS" & Chr(34) & ")=" & varD
.MoveNext
If .EOF Then .MoveLast
End With

varD - DateTime variable

Я пробовала без форматирования:
db.Execute "DELETE from tcustomerdocuments WHERE ID =" & varD
Но разници никакои,не работает.


Какой-то очень загадочный код... с очень загадочным циклом...

Может опишете что делать надо?
Tala
Новичок
Posts: 99
Joined: 21 May 2002 03:12
Location: Rostov -> Northbrook,IL

Re: Простои вопрос по VB

Post by Tala »

katit wrote:
Tala wrote:У меня несложнии вопрос, но как говорится заклинило.
Почему след. код не работает? Всем заранее спасибо.

With adoRS
db.Execute "DELETE from MyTable WHERE format(ID," & Chr(34) & "mm/dd/yyyy HH:MM:SS" & Chr(34) & ")=" & varD
.MoveNext
If .EOF Then .MoveLast
End With

varD - DateTime variable

Я пробовала без форматирования:
db.Execute "DELETE from tcustomerdocuments WHERE ID =" & varD
Но разници никакои,не работает.


Какой-то очень загадочный код... с очень загадочным циклом...

Может опишете что делать надо?


Процедура удаляет вибранную запись:


Sub Delete_Record()

If adoRS.RecordCount > 0 Then
If MsgBox("Are you absolutely sure you want to delete this record?", vbYesNo) = vbYes Then

With adoRS
Dim varD As Date
varD = .Fields("ID")
db.Execute "Delete from MyTable WHERE ID=#" & varD & "#"
.MoveNext
If .EOF Then .MoveLast
End With


Else
MsgBox "Delete operation canceled!", vbInformation
End If

Else
MsgBox "There is no record to delete.", vbInformation
End If
User avatar
katit
Уже с Приветом
Posts: 23804
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Re: Простои вопрос по VB

Post by katit »

Tala wrote:Процедура удаляет вибранную запись:


Sub Delete_Record()

If adoRS.RecordCount > 0 Then
If MsgBox("Are you absolutely sure you want to delete this record?", vbYesNo) = vbYes Then

With adoRS
Dim varD As Date
varD = .Fields("ID")
db.Execute "Delete from MyTable WHERE ID=#" & varD & "#"
.MoveNext
If .EOF Then .MoveLast
End With


Else
MsgBox "Delete operation canceled!", vbInformation
End If

Else
MsgBox "There is no record to delete.", vbInformation
End If


Нда... А что за база такая? (В SQL Сервере кавычками выделяется)
И почему надо этот рекордсет использовать ? А не ту-же таблицу рекордсет держит?
Tala
Новичок
Posts: 99
Joined: 21 May 2002 03:12
Location: Rostov -> Northbrook,IL

Re: Простои вопрос по VB

Post by Tala »

katit wrote:Нда... А что за база такая? (В SQL Сервере кавычками выделяется)
И почему надо этот рекордсет использовать ? А не ту-же таблицу рекордсет держит?


Что в SQL кавичками виделяется? DateTime Variable?

Мне нужно удалить строку по ключу, ключ -ето DateTime переменная.
Рекордсет не содержит всю таблицу.
User avatar
katit
Уже с Приветом
Posts: 23804
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Re: Простои вопрос по VB

Post by katit »

Tala wrote:Что в SQL кавичками виделяется? DateTime Variable?

Мне нужно удалить строку по ключу, ключ -ето DateTime переменная.
Рекордсет не содержит всю таблицу.


Да, в SQL Сервер дата выделяется кавычками.

Еще надо привести к одинаковому типу.

DELETE FROM A WHERE MyDate = CAST('asasd' AS DateTime)
or better
DELETE FROM A WHERE CAST(MyDate.... ) = 'asasas'
(check CAST for dates in Books online)

Но это не все. Если знаете КАК рекордсет был открыт то лучше делать удаление единичной командой.
gazum
Уже с Приветом
Posts: 183
Joined: 03 Sep 2003 21:58
Location: Buenos Aires

Post by gazum »

Я думаю, что рекордсет открыт таким образом, что независимое удаление row из таблицы, удаляет его и из рекордсета тоже. И после этого уже никаких .MoveNext или .MoveLast не получается. Можно, прежде чем удалять row, переложить нужные данные из рекордсета в массив или локальные переменные. А если уж очень хочется хранить всё в рекордсете, используйте disconnected recordset, который нечувствителен к изменениям в датабазе.
Tala
Новичок
Posts: 99
Joined: 21 May 2002 03:12
Location: Rostov -> Northbrook,IL

Post by Tala »

Вначале хотелось сделать проще:

With adoRS

.Delete
.UpdateBatch
.MoveNext

If .EOF Then .MoveLast

Но ето ничего не дало.

Error: Multiple-step operation generated errors. Check each status value.
User avatar
katit
Уже с Приветом
Posts: 23804
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Post by katit »

Tala wrote:Вначале хотелось сделать проще:

With adoRS

.Delete
.UpdateBatch
.MoveNext

If .EOF Then .MoveLast

Но ето ничего не дало.

Error: Multiple-step operation generated errors. Check each status value.

Ну это все равно не правильно..

Приведите пожалуйста код где открывается рекордсет.
User avatar
GlebZ
Уже с Приветом
Posts: 1152
Joined: 03 Jan 2002 10:01
Location: NJ --> MA

Post by GlebZ »

Вообще-то в SQLServer дата в таком формате идёт: yyyy-mm-dd hh:mm:ss.000
А что это за FORMAT в SQLServer? Там, вообще-то CONVERT или CAST.
Водку? Водку буду!
Tala
Новичок
Posts: 99
Joined: 21 May 2002 03:12
Location: Rostov -> Northbrook,IL

Post by Tala »

GlebZ wrote:Вообще-то в SQLServer дата в таком формате идёт: yyyy-mm-dd hh:mm:ss.000
А что это за FORMAT в SQLServer? Там, вообще-то CONVERT или CAST.


Я сразу не сказала, что данние не на SQL Server, а на Visual Foxpro.

With db
.ConnectionString = "Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB=Documents.dbc;SourceType=DBC;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;"
.CursorLocation = adUseClient

.Open
End With
.
.
.
.
adoRS.Open "SELECT * FROM MyTable WHERE customer_number = " & txtCustFields(0).Text & " ORDER BY " & docOrder, db, adOpenKeyset, adLockBatchOptimistic
User avatar
katit
Уже с Приветом
Posts: 23804
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Post by katit »

Tala wrote:adoRS.Open "SELECT * FROM MyTable WHERE customer_number = " & txtCustFields(0).Text & " ORDER BY " & docOrder, db, adOpenKeyset, adLockBatchOptimistic


А почему не написать что-то типа:
Connection.Execute "DELETE FROM MyTable WHERE customer_number="....

Оно и удалит то что вы циклом пытаетесь удалить.
Если проблема в локинге то можно закрыть рекордсет и потом открыть обратно.

А с синтаксис для FoxPro не помогу..
Sergey___K
Уже с Приветом
Posts: 13014
Joined: 10 Jul 2001 09:01
Location: VA

Post by Sergey___K »

Вы уверены, что ID это именно то поле, что должно сравниваться с датой? :)
И кстати, "не работает", это что?
User avatar
GlebZ
Уже с Приветом
Posts: 1152
Joined: 03 Jan 2002 10:01
Location: NJ --> MA

Post by GlebZ »

Tala wrote:Я сразу не сказала, что данние не на SQL Server, а на Visual Foxpro.

Тоды - уой!
Водку? Водку буду!
Tala
Новичок
Posts: 99
Joined: 21 May 2002 03:12
Location: Rostov -> Northbrook,IL

Post by Tala »

katit wrote:
А почему не написать что-то типа:
Connection.Execute "DELETE FROM MyTable WHERE customer_number="....

Оно и удалит то что вы циклом пытаетесь удалить.
Если проблема в локинге то можно закрыть рекордсет и потом открыть обратно.

А с синтаксис для FoxPro не помогу..


Ето не поможет, потому что customer_number не уникален. Вместо однои записи удалятся все записи для клиента.
User avatar
katit
Уже с Приветом
Posts: 23804
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Post by katit »

Tala wrote:Ето не поможет, потому что customer_number не уникален. Вместо однои записи удалятся все записи для клиента.


Так попробуйте для интереса перед удалением закрыть рекордсет и потом открыть. Чтобы точно знать что он не блокирует запись.
User avatar
Alex_L
Уже с Приветом
Posts: 12158
Joined: 02 Oct 2000 09:01
Location: Одесса, Укр -> Belmont, CA

Post by Alex_L »

Tala wrote:
katit wrote:
А почему не написать что-то типа:
Connection.Execute "DELETE FROM MyTable WHERE customer_number="....

Оно и удалит то что вы циклом пытаетесь удалить.
Если проблема в локинге то можно закрыть рекордсет и потом открыть обратно.

А с синтаксис для FoxPro не помогу..


Ето не поможет, потому что customer_number не уникален. Вместо однои записи удалятся все записи для клиента.


Тогда
Dim smth as Long
Dim smth1 as Date
Connection.Execute "DELETE FROM MyTable WHERE customer_number="smth & "AND MyDate = " smth1
My God!... I'm Gorgeous!
Tala
Новичок
Posts: 99
Joined: 21 May 2002 03:12
Location: Rostov -> Northbrook,IL

Post by Tala »

Alex_L wrote:Тогда
Dim smth as Long
Dim smth1 as Date
Connection.Execute "DELETE FROM MyTable WHERE customer_number="smth & "AND MyDate = " smth1


Я не могу понять, где в запросе ошибка в синтаксисе. При запуске я получаю либо Missing operand либо Syntax error.

db.Execute "Delete from MyTable WHERE ID= " & varD
User avatar
Alex_L
Уже с Приветом
Posts: 12158
Joined: 02 Oct 2000 09:01
Location: Одесса, Укр -> Belmont, CA

Post by Alex_L »

Tala wrote:
Alex_L wrote:Тогда
Dim smth as Long
Dim smth1 as Date
Connection.Execute "DELETE FROM MyTable WHERE customer_number="smth & "AND MyDate = " smth1


Я не могу понять, где в запросе ошибка в синтаксисе. При запуске я получаю либо Missing operand либо Syntax error.

db.Execute "Delete from MyTable WHERE ID= " & varD


Dim DbCommand as String
DbCommand="Delete from MyTable WHERE ID= " & varD
db.Execute DbCommand
Посмотрите в Debug Mode какое значение имеет DbCommand

Выполните команду в самой базе.
My God!... I'm Gorgeous!
Tala
Новичок
Posts: 99
Joined: 21 May 2002 03:12
Location: Rostov -> Northbrook,IL

Post by Tala »

Всем спасибо за ответи.


Я нашла как поступить. Мне надоело возитьста с DateTime типом данних. Поетому я поменяла в Table designer DateTime на Character. После етого все стало работать великолепно, как по мановению волшебнои палочки.

Return to “Вопросы и новости IT”