[Gambas-user] Problem with Gambas and MySql
Caveat
Gambas at ...1950...
Sat Oct 5 23:11:57 CEST 2013
MySQL itself doesn't mind about having no primary key:
mysql> desc test_table;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| Actual ID | varchar(20) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
mysql> select * from test_table where `Actual ID` = 'My actual ID';
+--------------+
| Actual ID |
+--------------+
| My actual ID |
| My actual ID |
| My actual ID |
| My actual ID |
| My actual ID |
| My actual ID |
+--------------+
6 rows in set (0.00 sec)
mysql> delete from test_table where `Actual ID` = 'My actual ID' limit 2;
Query OK, 2 rows affected (0.13 sec)
mysql> select * from test_table where `Actual ID` = 'My actual ID';
+--------------+
| Actual ID |
+--------------+
| My actual ID |
| My actual ID |
| My actual ID |
| My actual ID |
+--------------+
4 rows in set (0.00 sec)
If the records are *identical*, it *can't* matter which ones you
actually delete!
Even in Gambas, I don't run into any problems specifically to do with
having no Primary Key:
Try myDB.Open
If Error Then
Message("Cannot Open database:" & Error.Text)
Return False
End If
myDB.Exec("delete from test_table")
For n = 1 To 6
myDB.Exec("insert into test_table values ('My actual ID')")
Next
res = myDB.Exec("select * from test_table")
counter = 0
res.MoveFirst
While res.Available
counter += 1
Print Str(counter) & ": " & res["Actual ID"]
res.MoveNext
Wend
myDB.Exec("delete from test_table where `Actual ID` = 'My actual ID'
limit 2")
res = myDB.Exec("select * from test_table")
counter = 0
res.MoveFirst
While res.Available
counter += 1
Print Str(counter) & ": " & res["Actual ID"]
res.MoveNext
Wend
The above code works perfectly, giving the expected results:
1: My actual ID
2: My actual ID
3: My actual ID
4: My actual ID
5: My actual ID
6: My actual ID
1: My actual ID
2: My actual ID
3: My actual ID
4: My actual ID
Willy, can you explain again EXACTLY what your problem is? What error
do you get, where, and when... ?
Kind regards,
Caveat
On 05/10/13 14:08, Willy Raets wrote:
> On Sat, 2013-10-05 at 10:08 +0200, Fernando Martins wrote:
>> On 10/05/2013 01:25 AM, Willy Raets wrote:
>>> On Fri, 2013-10-04 at 22:53 +0200, Willy Raets wrote:
>>>
>>> Nando, Fernando and Caveat,
>>>
>>> Thanks for your responses.
>>>
>>>> Content in 'ICzakgewicht' can be like this:
>>>> | ID | Gewicht |
>>>> 345 100
>>>> 345 100
>>>> 345 50
>>>> 347 200
>>>> 347 200
>>>> 347 200
>>>> 347 200
>>> @ Fernando and Caveat
>>>
>>> Above you can see that more than one record can be exactly the same.
>>> At any time only one of them needs to be removed.
>>> With Gambas this can be done, looking for the first record meeting the
>>> criteria, delete it, next update and leave the table.
>>>
>>> With SQL DELETE all records that meet the criteria will be deleted
>>> instead of only one.
>>>
>>> That is why this is not an option.
>>>
>>>
>> "duplicate rows are and always were a mistake in SQL", C.J.Date
>>
>> http://books.google.nl/books?id=y_eVBB5qdwMC&pg=PA159&lpg=PA159&dq=c+j+date+duplicate+records&source=bl&ots=DjN-LDuU2B&sig=5-vlJ8itEkC7h6aFMt2PxHkT-ug&hl=en&sa=X&ei=1cdPUtjSCcHH0QWvooGQCw&redir_esc=y#v=onepage&q=c%20j%20date%20duplicate%20records&f=false
>>
>> In my experience, most often there is a design problem with the database
>> allowing for duplicates. With duplicates, you step out of the set theory
>> behind relational dbs and enter into trouble. I admit I have done it
>> myself, but best be avoided.
>>
> Then adding a primary key should solve that problem.
>
More information about the User
mailing list