Вопрос о внутреннем соединении и первичных ключах в SQLite DBIOS

Программируем под IOS
Ответить
Anonymous
 Вопрос о внутреннем соединении и первичных ключах в SQLite DB

Сообщение Anonymous »


У меня есть вариант в моем приложении для добавления различных чипов в их сбор. Хотите добавить чипы, открывается окно, чтобы позволить им выбирать желаемый чип из отображаемого списка. Это запускает функцию Savethesupplies, показанную ниже. Сценарий, в котором возникает проблема.
Если игрок A добавляет чип за 50 долларов и экономит его. Затем более поздний игрок B пытается добавить чип за 50 долларов, он выносит ошибку «Ошибка 19: Уникальное ограничение не удалось: player_supplies_chips.supplyid_xref - во время выполнения вставки в player_supplies_chips (supplyid_xref, playerid_supply_xref, supply_count, supplype) значения (? ?) ". Таблица CrossReftable_Player2Supplies, которую текущий игрок уже сохранил. < /p>
func get_The_Supply_IDs()
{
the_Supply_IDs_Array.removeAll()

let crossRefTable_Player2Supplies = "Player_Supplies_\(supplyType)"

do {
try Database_GRDB.shared.databaseConnection!.read { db in
for theID in try Int64.fetchAll(db, sql: "SELECT SupplyID_XRef FROM \(crossRefTable_Player2Supplies) WHERE PlayerID_Supply_XRef = ?", arguments: [gPlayerID])
{
the_Supply_IDs_Array.append(theID)
}
}
} catch {
print("Couldn't get the_Supply_IDs_Array! \(VC_String) \(error)")
}
}

// MARK: - Save Supply
func saveTheSupplies()
{
let crossRefTable_Player2Supplies = "Player_Supplies_" + supplyType
let theCount = Int(counterFld_Outlet.text ?? "1") ?? 1

do {
try Database_GRDB.shared.databaseConnection!.write { db in
try db.execute(sql: "INSERT INTO \(crossRefTable_Player2Supplies) (SupplyID_XRef, PlayerID_Supply_XRef, Supply_Count, Supply_Type) VALUES (?, ?, ?, ?)",
arguments: [supplyID, gPlayerID, theCount, supplyType])
}

applySnapshot()

} catch {

let theString = "\(error)"
print("error", theString)

get_The_Supply_IDs()

if the_Supply_IDs_Array.contains(supplyID)
{
sendConfirmationAlert(theTitle: K.Titles.itemAlreadyExists, theMessage: K.Titles.editChangeQuanity, buttonTitle: K.Titles.ok)
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... -sqlite-db
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»